如何简化C#中可为null的布尔值的使用

本文关键字:布尔值 null 何简化 | 更新日期: 2023-09-27 18:00:32

以下是一些入门示例代码:

class Foo
{
   public bool? IsValid { get; set; }
}
// later in some other function...
void DoStuff( Foo myFoo )
{
   myControlState.Visible = myFoo.IsValid.HasValue ? myFoo.IsValid.Value : false;
}

我遇到了很多情况,我必须使用如上所述的三元运算符才能正确使用可为null的bool。如果有一种稍微简单一点的方法可以在不抛出异常的情况下获得bool的值,那就太好了。上面的代码看起来很直接,但在更复杂的情况下,它最终会变成很多代码。我希望有一些简单的东西,比如:

myControlState.Visible = GetNullableValue<bool>( myFoo );

除了三元算子,有人有更干净的替代方案吗?

如何简化C#中可为null的布尔值的使用

如果可以使用null合并运算符使其更可读,则可以使用该运算符。

myControlState.Visible = myFoo.IsValid ?? false;

这是更优雅的

 myControlState.Visible = myFoo.IsValid ?? false;
myControlState.Visible = myFoo.IsValid.GetValueOrDefault();

如果您正在从SQL server读取位值并希望检查是否存在空错误,请对数据行使用以下Extension方法

public static T GetValueOrDefault<T>(this DataRow row, string key)
{
    return row.GetValueOrDefault(key, default(T));
}

以及当您从SQL服务器中读取数据时。

 Boolean IsVisible = GetValueOrDefault<string>("FieldName");