确定对象是否为 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");
我有一个对象数组:
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");