确定对象是否为 DateTime 而非 null 作为三元中的条件

Determine if an object is a DateTime and not null as a condition within ternary

我有一个对象数组:

object[] myArray

这个数组可以包含int、string、DateTime等数据类型。

现在我正在尝试检查 myArray 中的对象是否属于 DateTime 类型而不是 null,所以我执行下面的三进制:

string strDate = myArray[pos] != null && myArray[pos].GetType() is typeof(DateTime) ? Convert.ToDateTime(myArray[pos]).ToString("dd/MM/yyyy") : string.Empty;

但是我从 typeof(DateTime) 开始遇到以下错误:

Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement

您不需要调用 Convert.ToDateTime,因为您已经进行了检查以确保该对象是 DateTime。此外,除了使用三元运算符之外,您还可以使用新的 switch 表达式以及一些模式匹配:

string stDate = myArray[pos] switch
{
    DateTime d => d.ToString("dd/MM/yyyy"),
    _          => string.Empty
};

您可以使用 is 运算符,例如

具有 C#7 模式匹配功能的解决方案

string strDate = (myArray[pos] is DateTime date) ? date.ToString("dd/MM/yyyy"): string.Empty;

以下方法适用于旧的 C# 编译器。不过,我强烈建议转向 VS 2019。你的生活会变得更轻松...

var bob = myArray[pos] as DateTime?;
string strDate = bob == null ? string.Empty : bob.Value.ToString("dd/MM/yyyy");