为什么这不起作用?
bool? value = (1==2 ? true : null);
这很好用:
bool? value = null;
或
bool? value = true;
答案 0 :(得分:4)
您必须明确地将返回类型转换为bool?
,如:
bool? value = (1 == 2 ? (bool?)true : null);
或
bool? value = (1 == 2 ? true : (bool?)null);
first_expression和second_expression的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。
由于bool
(true)和null
之间没有可用的隐式转换,因此您会收到错误消息。
答案 1 :(得分:1)
当您使用三元运算符时,冒号的两侧必须是相同的类型:
var value = (1 == 2 ? true : (bool?)null);
这仅适用于值类型,因为值类型不能隐式转换为null(因此需要可以为空的bool,nullable int等)。
int groupId = (userId == 7) ? 5 : null; // invalid
int groupId = (userId == 7) ? 5 : (int)null; // valid
可以在引用类型的另一端使用null
,可以为空:
string name = (userId == 7) ? "Bob" : null; // valid
MyClass myClass = (userId == 7) ? new MyClass() : null; // valid