C# 这两种可为null的类型之间有什么区别?
这两者有什么区别C# 这两种可为null的类型之间有什么区别?,c#,C#,这两者有什么区别 public Nullable<bool> val_a { get; set; } public bool? val_b { get; set; } public可空值{get;set;} 公共场所?val_b{get;set;} 它们都是可为空的类型 另外,如何测试val_b在一行中是否可以为null?bool?是可以为null的简写符号。它们是一样的 从: 任何可为null的值类型都是泛型System.nullable结构的实例。您可以使用以下任意可互换
public Nullable<bool> val_a { get; set; }
public bool? val_b { get; set; }
public可空值{get;set;}
公共场所?val_b{get;set;}
它们都是可为空的类型
另外,如何测试val_b在一行中是否可以为null?
bool?
是可以为null的简写符号。它们是一样的
从:
任何可为null的值类型都是泛型System.nullable结构的实例。您可以使用以下任意可互换形式引用具有底层类型T的可空值类型:可空或T
要测试val\u b
是否为null
,只需检查val\u b.HasValue
。例如:
if (val_b.HasValue)
{
var b = val_b.Value;
}
您还可以执行以下操作:
var b = val_b.GetValueOrDefault();
或
在bool
的情况下,默认值将为false
要将默认值
覆盖为真值
,可以使用GetValueOrDefault
重载:
var b = val_b.GetValueOrDefault(true);
这是一回事。就像使用Int32
或int
一样。没有区别
测试可为空的布尔值很简单,但有一个缺点
像if(val_a)
和if(!val_a)
这样的常见测试不起作用,因为可空布尔有三种状态:true
、false
和null
这些方法之所以有效,是因为您正在进行显式比较:
if (val_a == true)
if (val_a == false)
if (val_a == null)
如果愿意,也可以使用null合并运算符,不过这对于其他可为null的类型更有用:
if (val_a ?? false)
查看是否要测试给定类型是否可为空。如何安全地获取val_b的值?@MistyD,检查更新的回答@mjwills,很棒的建议,更新了我的答案。另外,如何测试val_b是否可为空
您想知道它是null
还是可为空
?它们是两个完全不同的东西。这能回答你的问题吗?
if (val_a ?? false)