在C#中,`DateTime类型中的`?`是什么?`
我在使用System.DirectoryServices.AccountManagement时遇到了一些代码
public DateTime? LastLogon { get; }
是什么 ? 在DateTime之后。
我发现了一个参考? 运算符(C#参考) ,但它不是一回事。 (280Z28:这是使用Nullable Types的正确链接。)
的?
使它成为可空类型(它是Nullable
结构的简写,适用于所有值类型)。
可空类型(C#)
注意:
??
你链接到的是空合并运算符,它完全不同。
的?
在这种情况下,它不是运算符,它是类型的一部分。 语法
DateTime?
是的缩写
Nullable
所以它声明LastLogon
是一个将返回Nullable
的属性。 有关详细信息,请参阅MSDN 。
??
你链接到的地方在这里有点相关。 这是null-coalescing运算符,它具有以下语义。 表达方式
x ?? y
如果x
为null
则求值为y
,否则求值为x
。 这里x
可以是引用类型或可空类型。
简写
Nullable
它是Nullable
的快捷方式。 请注意,使用这些类型的方法无法向COM公开,因为它们使用generics,尽管它们看起来并非如此。
正如其他人提到的那样? 语法使类型为可空。
使用可空类型时要记住的几个关键事项(取自文档 ,但我认为在这里调用它们会很有帮助):
- 在使用可空类型时,通常使用只读属性
Value
和HasValue
。
例如
int? num = null; if (num.HasValue == true) { System.Console.WriteLine("num = " + num.Value); }
- 您可以使用null合并运算符将默认值分配给可空类型。 这非常方便。
例如
int? x = null; int y = x ?? -1;
正如其他人所说, ?
用于将值类型声明为可空 。
在以下几种情况下这很好:
- 从数据库中提取数据时,该数据库具有存储在可空字段中的空值(映射到.NET值类型)
- 当您需要表示“未指定”或“未找到”时。
例如,考虑一个用于表示被询问一组非强制性问题的客户反馈的类:
class CustomerFeedback { string Name { get; set; } int? Age { get; set; } bool? DrinksRegularly { get; set; } }
Age
和DrinksRegularly
可空类型的使用可以用来表明客户没有回答这些问题。
在这个例子中,你引用我会为LastLogon
取一个null
值来表示用户从未登录过。
- Environment.SetEnvironmentVariable需要很长时间才能在用户或计算机级别设置变量
- 如何使用带有ODP(Oracle.DataAccess)的>> prepared query <<更新CLOB字段中的数据?