Answers:
我认为很多人都在关注这个值是可为空的事实,而不考虑他们真正想要的是什么:)
bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else { ... } // false or null
或者,如果您想要更多选择...
bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else if (nullableBool == false) { ... } // false
else { ... } // null
(nullableBool == true)
如果布尔将永远不会返回true?为空:P
如何使用GetValueOrDefault,这很容易解释,可以使用您想要的任何默认值:
if (nullableBool.GetValueOrDefault(false)) {
}
System.NotSupportedException: LINQ to Entities does not recognize the method 'Boolean GetValueOrDefault()' method, and this method cannot be translated into a store expression.
您可能不喜欢它,但我个人认为
if (x.HasValue && x.Value)
最易读。可以清楚地知道您正在使用可为空的类型,并且可以清楚地知道,在有条件地对其进行操作之前,首先要检查可空类型是否具有值。
如果采用您的版本并将变量替换为x,则它也将显示为:
if (x ?? false)
这样清楚吗?x是否明显是可为空的类型?我让你决定。
x
在上下文中很好,有时更干净;智慧:var openOrders = orders.Where(x=>x.Open ?? false)
只是想到布尔?因为具有3个值,事情变得简单起来:
if (someNullableBool == true) // only if true
if (someNullableBool == false) // only if false
if (someNullableBool == null) // only if null
使用扩展名。
public static class NullableMixin {
public static bool IsTrue(this System.Nullable<bool> val) {
return val == true;
}
public static bool IsFalse(this System.Nullable<bool> val) {
return val == false;
}
public static bool IsNull(this System.Nullable<bool> val) {
return val == null;
}
public static bool IsNotNull(this System.Nullable<bool> val) {
return val.HasValue;
}
}
Nullable<bool> value = null;
if(value.IsTrue()) {
// do something with it
}
null
的true
?
让我们检查一下如何定义与null的比较:
static void Main()
{
Console.WriteLine($"null != null => {null != null}");
Console.WriteLine($"null == null => {null == null}");
Console.WriteLine($"null != true => {null != true}");
Console.WriteLine($"null == true => {null == true}");
Console.WriteLine($"null != false => {null != false}");
Console.WriteLine($"null == false => {null == false}");
}
结果是:
null != null => False
null == null => True
null != true => True
null == true => False
null != false => True
null == false => False
因此,您可以放心使用:
// check if null or false
if (nullable != true) ...
// check if null or true
if (nullable != false) ...
// check if true or false
if (nullable != null) ...
if(nullable)...else if(!nulllable)...else..
实际上,我认为这(nullableBool ?? false)
是一个合理的选择,尤其是当您尝试在linq中评估可为空的布尔值时。
例如:
array.Select(v => v.nullableBool ?? false)
(from v in array where v.nullableBool ?? false)
我认为相对于:
array.Select(v => v.nullableBool.HasValue ? v.nullableBool.Value : false)
(from v in array where v.nullableBool.HasValue ? v.nullableBool.Value : false)
如果您只想true
针对null
/ 进行测试false
,那么我刚刚使用过的一个文件就读得很好。
bool? someCondition = null
if (someCondition.Equals(true))
...
给定枚举
public enum PublishMode { Edit, View }
你可以像这里一样
void MyMethod(PublishMode? mode)
{
var publishMode = mode ?? PublishMode.Edit;
//or
if (mode?? PublishMode.Edit == someValue)
....
}
nullable boolean
。