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

发布于 2024-11-17 02:38:02 字数 499 浏览 2 评论 0原文

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

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 的值而不抛出异常,那就太好了。上面的代码看起来很简单,但在更复杂的情况下,最终会产生大量代码。我希望得到一些简单的东西,比如:

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

有没有人有比三元运算符更干净的替代方案?

Here is some example code to get started:

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;
}

I run into a lot of situations where I have to use a ternary operator like above to properly use a nullable bool. It would be nice if there was a slightly simpler way of getting the value of the bool without throwing exceptions. The code above seems straight-forward but there are much more complex situations where this ends up being a lot of code. I was hoping for something simple like:

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

Does anyone have any cleaner alternatives to the ternary operator?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不奢求什么 2024-11-24 02:38:02

您可以使用空合并运算符(如果这使其更具可读性)。

myControlState.Visible = myFoo.IsValid ?? false;

you can use the null-coalescing operator if that makes it more readable.

myControlState.Visible = myFoo.IsValid ?? false;
寂寞陪衬 2024-11-24 02:38:02

这个更优雅

 myControlState.Visible = myFoo.IsValid ?? false;

This is more elegant

 myControlState.Visible = myFoo.IsValid ?? false;
你没皮卡萌 2024-11-24 02:38:02
myControlState.Visible = myFoo.IsValid.GetValueOrDefault();
myControlState.Visible = myFoo.IsValid.GetValueOrDefault();
紫竹語嫣☆ 2024-11-24 02:38:02

如果您正在从 SQL Server 读取位值并希望检查空错误,请

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

在从 SQL Server 读取数据时对数据行使用以下扩展方法。

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

If you are reading bit values from the SQL server and want to check against null errors, Use the following Extension method against the data Row

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

and when you are reading data from the SQL server put in.

 Boolean IsVisible = GetValueOrDefault<string>("FieldName");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文