[英]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.