在C#中,像大多数语言一样,常规布尔值不能为空。但是,您可以使用nullable types来获得所需的结果。
例如,如果你想有一个方法能够返回true
,false
,或null
,您可以指定一个可空布尔值,因为它的返回类型:
public bool? MyMethod()
{
// Stuff
}
通知的?
bool
后。这指定布尔值为可为空。
所以你的情况,你可以这样做:但是
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
if (string.IsNullOrEmpty(myString))
return null;
return int.Parse(myString) != 0;
}
被告知,与类型,如可为空的bool工作是棘手的。例如,如果您尝试将此方法的结果传递给另一个接受bool参数的方法,您将无法立即进行。
public void MyBoolMethod(bool parameter)
{
}
MyBoolMethod(MyMethod()); // This doesn't compile
你将不得不您可空布尔值转换为一个正常的,当然之后确保它是不空:
MyBoolMethod((bool)MyMethod());
..或者作为选择,确定一个缺省值对于这种情况(如果bool?
为空以便它可以在其他地方使用,则该变为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()的结果为空,返回false是否更有意义? – maccettura