如何使用三元运算符检查null或datetime值?

时间:2013-09-16 06:34:05

标签: c# asp.net ternary-operator

我想在c#?

中使用三元运算符检查传递的值是null还是datetime值

我试过这个

fromDate == null ? null : Convert.ToDateTime(fromDate)

收到错误:

type of conditional expression cannot be determined

我想检查变量fromDate是否为空或具有日期时间值?

  

变量fromDate来自Querystring和字符串类型。

7 个答案:

答案 0 :(得分:3)

来自?: Operator

  

first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。

condition ? first_expression : second_expression;

Convert.ToDateTime返回DateTimenullDateTime之间没有隐式转化条件运算符是一个表达式,需要返回类型。

我使用DateTime.TryParse(返回boolean)作为第一个表达式并使用另一个布尔值(true或{{1} })作为第二个表达式Damiths' answer似乎合乎逻辑。

或者您可以使用可居住的DateTime,如false

DateTime?

答案 1 :(得分:1)

如果您有fromDate的字符串值,请执行以下操作

DateTime dt;

bool isValidDate =  String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt); 

如果您知道日期时间格式/格式,您的输入最好使用DateTime.TryParseExact方法

如果fromDate是DateTime,那么简单就可以检查如下

fromDate.HasValue

您不需要?: Operator

答案 2 :(得分:0)

romDate == null ? null : Convert.ToDateTime(fromDate)

nullConvert.ToDateTime(fromDate)没有共同类型。编译器必须能够将canditional运算符中的两个表达式转换为相同的类型。

答案 3 :(得分:0)

我希望它能帮到你

   string format = "ddd dd MMM h:mm tt yyyy";
    DateTime dateTime;

    fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
        DateTimeStyles.None, out dateTime))?dateTime:null;

答案 4 :(得分:0)

看起来主要的问题是您尝试将null分配给DateTime

DateTime是一种结构,而不是引用类型,因此无法完成。

使用可空的DateTime(DateTime?)或特定值来表示null,例如DateTime.MinValue

点击此处查看示例:http://www.dotnetperls.com/nullable-datetime

答案 5 :(得分:0)

问题在于Convert.ToDateTime(fromDate)的类型为DateTime,它不能接受空值,这就是为什么此代码无法以这种形式工作的原因。您有两种选择。如果满足以下条件,则将其更改为常规:

if(fromDate != null)
{
        Convert.ToDateTime(fromDate)
}

或将DateTime强制转换为可为null的DateTime:

    fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)

C#中的三元运算符需要两个值都具有相同的类型,并在here中进行了说明。

答案 6 :(得分:-1)

你必须使用String.IsNullOrEmpty检查fromDate是否为null:

DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)