C# 如何从函数返回null或bool
我有这个功能:C# 如何从函数返回null或bool,c#,C#,我有这个功能: public bool GetBoolSetting(Settings setting) { return int.Parse(GetStringSetting(setting)) == 0 ? false : true; } 有一个问题是GetStringSetting(setting)可以返回null、“0”或“1”。当它返回一个null时,我得到一个异常 如果发生这种情况,我是否可以使GetBoolSetting函数返回null?您可能希望使用可为null的boo
public bool GetBoolSetting(Settings setting)
{
return int.Parse(GetStringSetting(setting)) == 0 ? false : true;
}
有一个问题是GetStringSetting(setting)
可以返回null
、“0”或“1”
。当它返回一个null
时,我得到一个异常
如果发生这种情况,我是否可以使GetBoolSetting
函数返回null?您可能希望使用可为null的bool,如下所示:
public bool? GetBoolSetting(Settings setting)
{
var s = GetStringSetting(setting);
if (string.IsNullOrEmpty(s))
return null;
return int.Parse(s) == 0 ? false : true;
}
或者,如果您更愿意将null视为false:
public bool GetBoolSetting(Settings setting)
{
var s = GetStringSetting(setting);
if (string.IsNullOrEmpty(s))
return false;
return int.Parse(s) == 0 ? false : true;
}
也可以考虑使用<代码> TyPARSE < /C> >而不是解析.< /P>
,在C语言中,与大多数语言一样,正则布尔值不是空的。但是,您可以使用来获得所需的结果
例如,如果希望某个方法能够返回true
、false
或null
,则可以指定一个可为null的bool作为其返回类型:
public bool? MyMethod()
{
// Stuff
}
注意bool
之后的?
。指定布尔值可为null的
因此,在您的情况下,您可以:
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
if (string.IsNullOrEmpty(myString))
return null;
return int.Parse(myString) != 0;
}
但是,请注意,使用诸如可为null的bools之类的类型是很棘手的。例如,如果您试图将此方法的结果传递给另一个采用bool参数的方法,则无法立即执行
public void MyBoolMethod(bool parameter)
{
}
MyBoolMethod(MyMethod()); // This doesn't compile
当然,在确保布尔值为非null之后,您必须将可为null的布尔值转换为普通布尔值:
MyBoolMethod((bool)MyMethod());
..或者,确定这种情况下的默认值(如果为空,则bool?
应该是什么,以便可以在其他地方使用),并将其转换
默认值为false
的示例:
bool newBool = MyMethod() ?? false;
另外一条建议,与你的问题无关,但我建议你这样做。与不安全的int.Parse
(如果提供的字符串无效,将引发异常)不同,请切换到:
出现异常是因为int.Parse
无法处理null
输入。你必须先检查一下
如果GetStringSetting
返回null,则要返回null,则需要将返回类型更改为Nullable
(缩写为添加问号:bool?
),例如:
使用返回值时,必须检查它是否有值,以便处理起来更复杂:
var boolSetting = GetBoolSetting(...);
if (boolSetting.HasValue)
{
// Check boolSetting.Value
}
else
{
// Handle null value
}
有关可为空数据类型的概述,请参见此 您可以将方法的类型更改为并继续执行一条线性语句,如下所示:
public bool? GetBoolSetting(Settings setting)
{
return GetStringSetting(setting) != null ?
int.Parse(GetStringSetting(setting)) != 0 : new bool?();//Or default(bool?)
}
您还可以使用而不是new bool?()
,它返回可空bool的默认值为null。我建议您返回true
或false
,并去掉奇怪的null
逻辑
使用C#7语法,这可以在一行中完成:
public bool GetBoolSetting(Settings setting) => int.TryParse(GetStringSetting(setting), out int i) && i == 1;
您真的希望它返回空值吗?想想所有受此影响的事情。如果GetStringSetting()
的结果为null,那么返回false不是更有意义吗?
public bool? GetBoolSetting(Settings setting)
{
int result = 0;
if (!int.TryParse(GetStringSetting(setting), out result))
return null;
return result == 0 ? false: true;
}
public bool? GetBoolSetting(Settings setting)
{
return GetStringSetting(setting) != null ?
int.Parse(GetStringSetting(setting)) != 0 : new bool?();//Or default(bool?)
}
public bool GetBoolSetting(Settings setting) => int.TryParse(GetStringSetting(setting), out int i) && i == 1;