1

我想在 c# 中使用三元运算符检查传递的值是空值还是日期时间值?

我试过这样

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

收到错误:

type of conditional expression cannot be determined

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

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

4

7 回答 7

4

来自?: Operator

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

condition ? first_expression : second_expression;

Convert.ToDateTime返回并且和之间DateTime没有隐式转换条件运算符是一个表达式,需要返回类型。nullDateTime

一个选项对我来说似乎是合乎逻辑的,使用DateTime.TryParse(返回boolean)作为第一个表达式并使用另一个布尔值(truefalse)作为第二个表达式Damiths 的回答似乎合乎逻辑。

或者,您可以使用可为空的 DateTime ,例如DateTime?

DateTime? foo;

if(foo.HasValue)
{
   //Nullable DateTime has a value..
}
于 2013-09-16T06:41:47.047 回答
1

fromDate如果你有如下的字符串值

DateTime dt;

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

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

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

fromDate.HasValue

你不需要?: Operator

于 2013-09-16T06:48:52.947 回答
0

问题是 Convert.ToDateTime(fromDate) 是 DateTime 类型,它不能接受空值,这就是为什么这段代码不能以这种形式工作的原因。你有两个选择要做。如果出现以下情况,请将其更改为常规:

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

或将 DateTime 转换为可为空的 DateTime:

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

C# 中的三元运算符需要两个值的类型相同,此处对此进行了说明。

于 2020-04-10T09:55:57.210 回答
-1
romDate == null ? null : Convert.ToDateTime(fromDate)

null并且Convert.ToDateTime(fromDate)没有普通类型。编译器必须能够将条件运算符中的两个表达式转换为相同的类型。

于 2013-09-16T06:38:37.310 回答
-1

您必须使用 String.IsNullOrEmpty 来检查 fromDate 是否为 null,如下所示:

DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)
于 2013-09-16T06:40:04.167 回答
-1

我希望它会帮助你

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

    fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
        DateTimeStyles.None, out dateTime))?dateTime:null;
于 2013-09-16T06:50:36.370 回答
-1

看起来主要问题是您正在尝试分配nullDateTime

DateTime 是一个结构而不是引用类型,因此无法做到这一点。

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

看看这里的例子: http: //www.dotnetperls.com/nullable-datetime

于 2013-09-16T07:06:25.980 回答