在C#中,就像大多数语言一样,普通布尔值不可为空。但是您可以使用
可空类型来获得所需的结果。
例如,如果您希望方法能够返回
true
,
false
或
null
,则需要指定可空布尔值作为其返回类型:
public bool? MyMethod()
{
}
请注意
bool
后面的问号
?
。这表示该布尔值是可空的。
因此在您的情况下,您可以执行以下操作:
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
if (string.IsNullOrEmpty(myString))
return null;
return int.Parse(myString) != 0;
}
注意,然而使用可空布尔类型等类型是很棘手的。例如,如果你试图将这个方法的结果传递给另一个接受布尔参数的方法,你将无法立即这样做。
public void MyBoolMethod(bool parameter)
{
}
MyBoolMethod(MyMethod()); // This doesn't compile
在将可空布尔值转换为普通布尔值之前,您需要确保它不是 null:
MyBoolMethod((bool)MyMethod());
..或者,可以为这种情况决定一个默认值(如果bool?
为空,它应该变成什么,以便在其他地方使用),然后进行转换。
以false
作为默认值的示例:
bool newBool = MyMethod() ?? false;
这里有一个额外的建议,虽然和你的问题关系不大,但我推荐你使用。不要使用不安全的int.Parse
,如果提供的字符串无效会抛出异常,而是改用Int32.TryParse
:
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
int output = -1;
if (string.IsNullOrEmpty(myString) || !int.TryParse(myString, out output))
return null;
return output != 0;
}
GetStringSetting()
的结果为 null,返回 false 不是更合理吗? - maccettura