我有一个对象数组:
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;
但我从类型(DateTime(开始得到以下错误:
只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句
您可以像一样使用is
运算符
具有C#模式匹配功能的解决方案
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");
您不需要调用Convert.ToDateTime
,因为您已经进行了检查以确保对象是DateTime
。此外,您可以使用新的switch
表达式以及一些模式匹配,而不是使用三元运算符:
string stDate = myArray[pos] switch
{
DateTime d => d.ToString("dd/MM/yyyy"),
_ => string.Empty
};