【问题标题】:A neater way of handling bools in C# [duplicate]在 C# 中处理布尔值的一种更简洁的方法 [重复]
【发布时间】:2015-04-28 17:30:43
【问题描述】:

在 C# 中使用可为空的布尔值我发现自己经常编写这种模式

if(model.some_value == null || model.some_value == false)
{
    // do things if some_value is not true
}

有没有更简洁的方式来表达这句话?我不能使用不可为空的布尔值,因为我不能改变模型,而且我不能这样做

if(model.some_value != true)
{
    // do things if some_value is not true
}

因为如果model.some_value 为空,这将抛出空引用异常

我有一个想法: 我可以为 String.IsNullOrEmpty - bool.IsNullOrFalse 之类的布尔值编写扩展方法。这已经足够整洁了,但我想知道是否已经有一些更明显的方法可以做到这一点?

【问题讨论】:

  • 第二个代码块工作完美。为什么你确实得到空引用错误。 dotnetfiddle.net/yf1bro
  • 你尝试#2了吗?它应该工作正常..
  • @JenishRabadiya from msdn - "如果 HasValue 属性为 true,则可以使用 Value 属性访问当前 Nullable 对象的值。否则,尝试访问其值会抛出一个 InvalidOperationException 异常。" msdn.microsoft.com/en-us/library/sksw8094%28v=vs.110%29.aspx
  • @Gusdor 你看过我提供的小提琴吗?它有效,为什么我们要获得它的价值?第二个代码块不访问它。
  • @JenishRabadiya 是对的,它确实在那里工作。道歉

标签: c# boolean nullable


【解决方案1】:

使用空合并运算符来处理值为空的情况。

if(model.some_value ?? false != true)
{
    // do things if some_value is not true
}

来自 msdn:

??运算符(C# 参考)

??运算符称为空合并运算符。它返回 如果操作数不为空,则为左操作数;否则返回 右手操作数。

https://msdn.microsoft.com/en-us/library/ms173224.aspx

或者,switch 会这样做。

switch(model.some_value)
{
    case false:
    case null:
    // do things if some_value is not true
    break;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2021-01-11
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多