C# 确定对象是否为DateTime,并且作为三元内的条件不为null

C# 确定对象是否为DateTime,并且作为三元内的条件不为null,c#,visual-studio-2013,.net-4.5,C#,Visual Studio 2013,.net 4.5,我有一个对象数组: 对象[]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/yy

我有一个对象数组:

对象[]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)开始得到以下错误:

只有赋值、调用、递增、递减、等待和新对象 表达式可以用作语句


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

string stDate = myArray[pos] switch
{
    DateTime d => d.ToString("dd/MM/yyyy"),
    _          => string.Empty
};
您可以使用运算符like

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

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

下面的方法适用于旧的C#编译器。不过我强烈建议搬到VS2019。你的生活会变得更轻松

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

只需尝试使用
is DateTime
。DateTime是一种类型,请将其缩短:
string strDate=(myArray[pos]是DateTime日期)?日期:ToString(“dd/MM/yyyy”):“”
@Fabjan如果我将typeof(DateTime)改为仅仅是DateTime,我会得到一个错误:“给定的表达式从来不是提供的类型('System.DateTime')。如果使用
is
,请去掉
GetType
。你应该早点这样做(即今天)而不是更晚。没有好的理由继续使用VS 2013。你已经花费了其他开发人员半个多小时的时间来想出“旧”的方法来编译代码。这是一个相当大的持续成本。咬紧牙关并升级。这对c#8人群来说是个好答案。我忘了说我正在使用Visual Studio 2013这不起作用,date变量中的DateTime之后出现错误,表示:expected')我正在使用NET4.5和Visual Studio 2013您的第二个答案根本不起作用。我需要在应用.ToString之前应用Convert.ToDateTime