C# SqlParameter 数组如何使用三元运算符有条件地将值设置为空

C# SqlParameter array how to conditionally set value to null using ternary operator

我有以下代码,如果我的对象值之一为 null 并且如果不将其设置为不同的变量值,我试图将 sql 参数设置为 null。

理想情况下,我只是让 enumvalue 为 null,但由于这是 EnumListValues 的枚举转换,null 似乎默认为 0。所以我想出的三元解决方案是解决这个问题。如果 object1 不存在,我不希望我的 enumvalue 变量为 0。

public enum EnumListValues
{
    Disabled = 0,
    Enabled = 1
}

Enum.TryParse(object1?.Value, out EnumListValues.LightStatus enumvalue);
new SqlParameter("object1param", SqlDbType.Bit) {Value = object1 != null ? enumvalue : DBNull.Value } //enumvalue is 0 or 1

但是我收到错误:

Error CS8370
Feature 'target-typed conditional expression' is not available in C# 7.3. Please use language version 9.0 or greater

最简单的答案是使用 TryParse 中的 return 的三元来获得你想要的。这会将 enumvalue 变成 LightStatus?然后您可以将其输入您的 SqlParameter。

var enumvalue = Enum.TryParse(object1?.Value, out EnumListValues.LightStatus tmp) 
    ? (object)tmp
    : DBNull.Value;
new SqlParameter("object1param", SqlDbType.Bit).Value = enumvalue; 
//enumvalue is a boxed 0, 1 or DBNull.Value