我想在c#?
中使用三元运算符检查传递的值是null还是datetime值我试过这个
fromDate == null ? null : Convert.ToDateTime(fromDate)
收到错误:
type of conditional expression cannot be determined
我想检查变量fromDate
是否为空或具有日期时间值?
变量fromDate来自Querystring和字符串类型。
答案 0 :(得分:3)
来自?: Operator
:
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换。
condition ? first_expression : second_expression;
Convert.ToDateTime
返回DateTime
,null
和DateTime
之间没有隐式转化。 条件运算符是一个表达式,需要返回类型。
我使用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)
null
和Convert.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
答案 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)