簡體   English   中英

如果字符串在c#中有空或空格,如何返回false

[英]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是結構:

  1. 使它成為一個類intead。 然后你可以返回null。
  2. 將方法簽名更改為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM