提问者:小点点

有没有一种方法可以访问可为null的<t>.value而不执行可为null的<t>.hasvalue检查?


我有一些可为空的值,希望在访问它们的值时避免异常。下面展示了我想要实现的一个示例。我目前有

DateTime? dt = null;
    
if(dt != null) 
{
    Console.WriteLine(dt?.ToString("yyyyMMddHHmmss"));  
}

但我看到可为空的值有一个value属性。等价物将是

DateTime? dt = null;
    
if(dt.HasValue) 
{
    Console.WriteLine(dt.Value.ToString("yyyyMMddHHmmss")); 
}

有什么方法可以把代码简化成这样吗?

DateTime? dt = null;
    
Console.WriteLine(dt.Value?.ToString("yyyyMMddHHmmss"));

以便它只在dt不为空时运行.ToString(“YYYYMMDDHMMSS”)


共2个答案

匿名用户

您可以删除value属性,只需在nullable本身上调用它:

DateTime? dt = null;
    
Console.WriteLine(dt?.ToString("yyyyMMddHHmmss"));

匿名用户

使用模式匹配(从C#7.0开始),您可以编写

DateTime? dt = null;
if (dt is DateTime d) {
    Console.WriteLine(d.ToString("yyyyMMddHHmmss"));
}

此类型模式起作用,因为null没有类型,null is t总是返回false。如果该值不为null,则将其转换为t,并赋给t类型的新变量d

您还可以使用字符串插值,特别是如果有不止一个日期,

Console.WriteLine($"Date: {d:yyyyMMddHHmmss}");