如何使用三元运算符检查空值或日期时间值
本文关键字:空值 检查 日期 时间 运算符 三元 何使用 | 更新日期: 2023-09-27 18:31:22
我想在 c# 中使用三元运算符检查传递的值是空值还是日期时间值?
我试过这样
fromDate == null ? null : Convert.ToDateTime(fromDate)
收到错误:
type of conditional expression cannot be determined
我想检查变量 fromDate
是否为空或具有日期时间值?
变量来自日期来自查询字符串和字符串类型。
从 ?: Operator
:
first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
condition ? first_expression : second_expression;
Convert.ToDateTime
返回DateTime
,并且null
和DateTime
之间没有隐式转换。条件运算符是一个表达式,需要返回类型。
对我来说,使用DateTime.TryParse
(返回boolean
)作为第一个表达式并使用另一个布尔值(true
或false
)作为第二个表达式,一个选项似乎是合乎逻辑的。达米斯的回答似乎是合乎逻辑的。
或者,您可以使用可为空的日期时间,例如DateTime?
DateTime? foo;
if(foo.HasValue)
{
//Nullable DateTime has a value..
}
如果您有fromDate
的字符串值,请执行以下操作
DateTime dt;
bool isValidDate = String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt);
如果您知道您输入的日期时间格式/格式,您最好使用DateTime.TryParseExact
方法
如果fromDate是日期时间,那么简单你可以检查如下
fromDate.HasValue
你不需要?: Operator
问题是 Convert.ToDateTime(fromDate) 的类型是 DateTime,它不能接受空值,这就是为什么此代码在这种形式中不起作用的原因。您有两个选择。如果出现以下情况,请将其更改为常规:
if(fromDate != null)
{
Convert.ToDateTime(fromDate)
}
或者将日期时间转换为可为空的日期时间:
fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)
C# 中的三元运算符需要两个值的类型相同,此处对此进行了说明。
romDate == null ? null : Convert.ToDateTime(fromDate)
null
和Convert.ToDateTime(fromDate)
没有通用类型。编译器必须能够将候选运算符中的两个表达式强制转换为同一类型。
我希望它能帮助你
string format = "ddd dd MMM h:mm tt yyyy";
DateTime dateTime;
fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateTime))?dateTime:null;
你必须使用 String.IsNullOrEmpty 来检查 fromDate 是否为空,如下所示:
DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)
看起来主要问题是您正在尝试将null
分配给DateTime
DateTime 是一个结构而不是引用类型,因此无法执行此操作。
使用可为空的日期时间 ( DateTime?
) 或特定值来指示空,例如DateTime.MinValue
看看这里的例子:http://www.dotnetperls.com/nullable-datetime