[英]how to return false if string has null or white space in c#
我不能返回null,因為我的Hlist
是一個不可為空的類型。 還有什么我可以在null的地方返回?
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
{
HList result = listentry.Find(delegate(HList bk)
{
return bk.letter == letter;
});
return result;
}
else
{
return ?;
}
}
使用Nullable<HList>
代替?
HList? findHListentry(string letter)
{
///
return null;
}
有幾種處理非可空值類型的方法:
Nullable<HList>
(它的簡寫名稱是HList?
),或 HList
條目,類似於Microsoft為Guid
定義一個條目 bool
而不是HList
,並通過out
參數返回HList
,就像在Dictionary.TryGetValue
完成它一樣。 使用特殊值:
struct HList {
public static HList Empty;
...
}
if (...) {
return HList.Empty;
}
回歸bool
:
bool findHListentry(string letter, out HList res) {
...
}
如果方法的輸入真的不應為null
或空字符串,則可能拋出異常:
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
throw new ArgumentNullException("letter");
HList result = listentry.Find(
delegate(HList bk)
{
return bk.letter == letter;
}
);
return result;
}
(請注意,我也顛倒了條件邏輯,因為它聽起來像是在尋找與問題標題相反的東西。)
您還可以查看代碼約定以驗證方法的前提條件,而不是手動檢查輸入並拋出異常。
你有幾個選擇:
如果HList
是結構:
HList? findHListentry(string letter)
HList? findHListentry(string letter)
你可能想看看N的Nullable
如果您不想返回null,則可以創建一個HList的靜態實例,用於表示它是一個“空”值。
與EventArgs.Empty類似
public static readonly HList EmptyHList = new Hlist() { /* initialise */ };
一種實現是提供非可空類型的Empty實例,並返回該實例以代替null。 以字符串為例......雖然String是.NET中的可空類型,但它包含一個名為Empty的內置只讀字段,因此使用String可以執行以下操作:
if(mystring == null)
{
//My String Is Null
}
或者,你可以做到這一點
if(mystring == String.Empty)
{
//My String is Empty
}
雖然它可能不是最好的方法,但您可以在類/結構中添加一個空的HList實例。 例如
HList findHListentry(string letter)
{
if (string.IsNullOrWhiteSpace(letter))
{
HList result = listentry.Find(delegate(HList bk) { return bk.letter == letter; });
return result;
}
else
{
return HList.Empty;
}
}
public struct HList
{
public const HList Empty;
}
現在你可以用null代替它
if(myHList == HList.Empty)
{
//My HList is Empty
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.