簡體   English   中英

C#中是否有一種優雅/內置的方法來添加兩個長度大於0的字符串連接器IFF?

[英]Is there an elegant/built-in method in C# to add a string connector IFF two strings have length > 0?

我知道我可以通過擴展來做到這一點(而且我可以使用StringBuilder做到這一點),但是我經常需要一種更好的方法。 假設我要組合一個姓氏和名字,這兩個名字中的任何一個都可能丟失(null或空,不在乎),如果兩個都存在,我只想要一個空格。 所以

return firstName + (!string.IsNullOrEmpty(firstName) && !string.IsNullOrEmpty(lastName) ? " " : string.Empty) + lastName;

給了我Joe Smith卻沒有給Joe Smith Joe[trailingspace][leadingspace]Smith

顯然,這是一個愚蠢的例子,但是我在現實世界中經常這樣做。 還有更好的主意嗎?

編輯 :不建議String.Join。 沒用 (好吧,除非您將它與LINQ結合使用,如下面的支出者所述。)

我會選擇類似的東西:

public static string JoinNonEmpty(string separator, params string[] values)
{
    return 
        string.Join(separator, values.Where(v => !string.IsNullOrEmpty(v)));

}

從這個博客的String.Join方法? ,您可以創建一個采用數組和分隔符的擴展方法?:

string[] input = {"Joe", null, "Smith"};
return input.Aggregate((x,y)=>String.IsNullOrEmpty(y)?x :String.Concat(x, " ", y));

我個人將使用string.Format():

var myName = string.Format( "{0}{1}{2}"
                           , firstName
                           , !string.IsNullEmptyOrwhitespace(firstName) && !string.IsNullEmptyOrWhitespace(lastName) ? " " : string.empty
                           , lastName
                           ); 

這不是依靠LINQ或擴展方法的聰明代碼,它是一種標准,基本且直接的方法-重要的是,您可以立即看到正在發生的事情以及應該取得的結果。 如果您希望在許多不同的地方進行相同的操作,則使用擴展方法將變得更加重要。

或者,您的數據對象可以封裝以下邏輯:

public class MyData
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string FullName
    {
        get { /*insert the string.Format() illustrated above */ }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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