[英]How can I return null or bool from a function
我有這個功能:
public bool GetBoolSetting(Settings setting)
{
return int.Parse(GetStringSetting(setting)) == 0 ? false : true;
}
有一個問題, GetStringSetting(setting)
可以返回null
, "0"
或"1"
。 當它返回null
我得到一個異常。
如果發生這種情況,我是否可以讓GetBoolSetting
函數返回null?
在C#中,與大多數語言一樣,常規布爾值不可為空。 但是,您可以使用可空類型來獲得所需的結果。
例如,如果您希望方法能夠返回true
, false
或null
,則指定可以為空的bool作為返回類型:
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?
如果它是null,應該變成什么,以便它可以在其他地方使用),並轉換它。
以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;
}
您可以將方法的類型更改為Nullable<bool>
並繼續使用下面的一個線性語句:
public bool? GetBoolSetting(Settings setting)
{
return GetStringSetting(setting) != null ?
int.Parse(GetStringSetting(setting)) != 0 : new bool?();//Or default(bool?)
}
您還可以使用default(bool?)
而不是new bool?()
返回Nullable bool的默認值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;
}
另外,考慮使用TryParse
而不是Parse。
您得到異常,因為int.Parse
無法處理null
輸入。 你必須先檢查一下。
如果要在GetStringSetting
返回null時返回null,則需要將返回類型更改為Nullable<bool>
(通過附加問號: bool?
),例如:
public bool? GetBoolSetting(Settings setting)
{
var strSetting = GetStringSetting(setting);
if (string.IsNullOrEmpty(strSetting))
return null;
return int.Parse(strSetting) == 0 ? false : true;
}
使用返回值時,您必須檢查它是否具有值,以便處理起來更復雜:
var boolSetting = GetBoolSetting(...);
if (boolSetting.HasValue)
{
// Check boolSetting.Value
}
else
{
// Handle null value
}
有關可空數據類型的概述,請參閱此鏈接 。
public bool? GetBoolSetting(Settings setting)
{
int result = 0;
if (!int.TryParse(GetStringSetting(setting), out result))
return null;
return result == 0 ? false: true;
}
我建議你返回true
或false
並擺脫奇怪的null
邏輯。
使用C#7語法,可以在一行中進行:
public bool GetBoolSetting(Settings setting) => int.TryParse(GetStringSetting(setting), out int i) && i == 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.