首页 > 解决方案 > c#直接等价于VB IsDate()

问题描述

我有一个“简单”的要求——快速检查一个对象是否有效DateTime,如果不是,返回一个已知的默认日期。

有许多替代解决方案:

  1. 通过添加对 VB 库的引用直接使用 VB 函数 - 简单但在解决方案中添加额外的库感觉像臃肿
  2. 使用DateTime.TryParse()- 需要先转换为objectstring不需要结果
  3. try catch挡住Convert.ToDateTime()- 感觉笨拙但简单

它们各有优缺点,而且都有开销——错过了一个更简单的解决方案

标签: c#

解决方案


使用is运算符:

Object foo = new DateTime();

if( foo is DateTime dt )
{
    Console.WriteLine( "The date is: {0:yyyy-MM-dd}", dt );
    return dt;
}
else
{
    return someDefaultDate;
}

如果您希望与 VB 的函数具有相同的行为,请在检查结果为 falseIsDate时添加调用:DateTime.TryParseis DateTime

static DateTime GetDateOrDefault( Object o, DateTime defaultValue )
{
    if( o is DateTime dt )
    {
        return dt;
    }
    else if( DateTime.TryParse( o?.ToString(), out dt ) )
    {
        return dt;
    }
    else
    {
        return defaultValue;
    }
}

推荐阅读