如何使用可空的bool

时间:2014-07-04 19:41:39

标签: c#

为什么这不起作用?

bool? value = (1==2 ? true : null);

这很好用:

bool? value = null;

bool? value = true;

2 个答案:

答案 0 :(得分:4)

您必须明确地将返回类型转换为bool?,如:

bool? value = (1 == 2 ? (bool?)true : null);

bool? value = (1 == 2 ? true : (bool?)null);

请参阅Conditional Operator C#

  

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