2013-06-19 415 views
2

我有一個對象具有一些屬性用分隔符連接字符串並考慮到空字符串

例如,

Employee 
-Name 
-Company 

我希望得到他們的名字和公司的一個格式化字符串以「 - 」隔開。

現在我可以做一個string.Join("-", e.Company, e.Name)但是如果公司爲空或空我得到「 - fred」。

有沒有更好的內置方法來考慮這些空白/空字符串。我以前使用一些簡短的ifs來包含 - 在string.format中,但看起來相當混亂。

即。

string.Format("{0}{1}{2}", e.Company, !string.IsNullOrWhiteSpace(e.Company) ? "-": string.Empty, e.Name); 

回答

3

您可以嘗試使用Join方法中的內嵌terniary:

string.Join("-", string.IsNullOrEmpty(e.Company) ? "fired" : e.Company, e.Name) 

編輯(我誤讀 '弗雷德' 拼寫錯誤的解僱)。
正如在另一個答案中提到的,擴展方法將清理代碼。你會將難看的代碼移動到不同的地方。

作爲一個擴展方法的替代方案中,我建議類似的東西允許更多的參數在稍後的時間如下:

public static string ExcludeEmptiesJoin(params string[] args) { 
    string outValue = string.Empty; 

    foreach (var arg in args.Where(s => !string.IsNullOrEmpty(s))) { 
     if (string.IsNullOrEmpty(outValue)) { 
      outValue = arg; 
     } else { 
      outValue = string.Join("-", outValue, arg); 
     } 
    } 

    return outValue; 
    } 

用法:

Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred")); 
Console.WriteLine(); 
Console.WriteLine(ExcludeEmptiesJoin("", "Fred")); 
Console.WriteLine(); 
Console.WriteLine(ExcludeEmptiesJoin("Company", "")); 
Console.WriteLine(); 
Console.WriteLine(ExcludeEmptiesJoin("Company", "", "4/4/1979")); 
Console.WriteLine(); 
Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred", "4/4/1979")); 

輸出:

Company-Fred

弗雷德

公司

公司-4 /1979分之4

公司弗雷德-4 /1979分之4

+0

他有一個內嵌他的問題是三元的。 –

+0

這看起來像是一個很好的方法,它會測試它,並標記正確,如果它的所有好 –

+0

如果你去這個解決方案,我會建議用'StringBuilder'替換'string.Join'。 – venerik

0

我懷疑你要簡化你比這更多已經有了,但是如果這種模式經常被使用,你可以將分隔符處理移動到一個擴展方法來「清除」一點;

static class StringExtensions 
{ 
    public static string RemoveLeadingOrTrailingToken(this string value, string token) 
    { 
     if (value.StartsWith(token)) 
      return value.Substring(token.Length); 
     if (value.EndsWith(token)) 
      return value.Substring(0, value.IndexOf(token, StringComparison.Ordinal)); 

     return value; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string s1 = "company"; 
     string s2 = "product"; 
     string result = String.Format("{0}-{1}", s1, s2).RemoveLeadingOrTrailingToken("-"); 
    }  
} 
0

以內嵌三元出來大概是清潔:

= string.IsNullOrWhiteSpace(e.Company) ? e.Name : string.Join("-", e.Company, e.Name); 
0

如果有兩個以上的屬性,說一個地址,這能解決你的問題:

List<string> attributes = new List<string>(new string[] { 
    e.Company, 
    e.Name, 
    e.Address}); 
attributes.RemoveAll(s => s == String.Empty); 
String.Join("-", attributes.ToArray()); 
+0

我想到了這一點,但後來決定不得不創建一個列表是更多的開銷。但感謝您的答案 –