为什么我不能在一个三元if语句中将一个可为空的int设置为null?
下面的C#代码:
int? i; i = (true ? null : 0);
给我的错误:
条件expression式的types不能确定,因为在'<null>'和'int'之间没有隐式转换
这不应该有效吗? 我在这里错过了什么?
编译器试图评估右边的expression式。 null
为null
, 0
是一个int
文字,不是int?
。 编译器试图告诉你,它不能确定expression式应该评估什么types。 null
和int
之间没有隐式转换,因此是错误消息。
你需要告诉编译器该expression式应该评估为int?
。 int?
之间有一个隐式转换int?
和int
,或者null
和int?
之间int?
,所以这些应该工作:
int? x = true ? (int?)null : 0; int? y = true ? null : (int?)0;
处理三元运算符时,您需要使用default()关键字而不是null。
例:
int? i = (true ? default(int?) : 0);
或者,您可以只投射null:
int? i = (true ? (int?)null : 0);
我个人坚持default()
表示法,这只是一个偏好,真的。 但是,你最终应该坚持一个特定的记法,恕我直言。
HTH!
部分(true ? null : 0)
以某种方式成为函数。 这个函数需要返回types。 当编译器需要确定返回types时,它不能。
这工作:
int? i; i = (true ? null : (int?)0);