2011-07-13 5 views
1

もちろん書くだけでも簡単ですが、C#2010には、以前の要素と次の要素の両方がnullでない場合にセパレータを追加する組み込みのJoin(または同様の)メソッドがあります空ではない?インテリジェントセパレータとの結合

つまり、SmartJoin(", ","Hood","Robin")は "Hood、Robin"を生成しますが、SmartJoin(", ", "Robin Hood", string.Empty)は単に "Robin Hood"を生成します。

public void SmartJoin(string separator, params string[] Items) 
{ 
    String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray()); 
} 
+0

出力は何ですか'SmartJoin("、 "First"、String.Empty、 "Second") 'のどれか? – jason

+0

その場合、 "First、Second"にする必要があります。申し訳ありませんが、私の表現は誤解を招いていました...私は2項目のリストしか考えていませんでした。 – RobinHood70

答えて

1

組み込みのは、あなたが必要が参加しないがあります。これについてはどのよう

+0

ありがとう、それは私が思ったものです。 – RobinHood70

5

+0

問題はそれを実装するのではなく、それを行う既存のフレームワークメソッドを指すことでした。 – NOtherDev

+1

良い点、私の読書スキルは今日も私には失敗しました。私はそれが昼寝の時間だと思う! – CodingGorilla

0

ここ

string result = new List<string>() { "Hood", "Robin" }.Aggregate(SmartJoin()); 
string result2 = new List<string>() { "Robin Hood", "" }.Aggregate(SmartJoin()); 

private static Func<string, string, string> SmartJoin() 
{ 
    return (x, y) => x + (string.IsNullOrEmpty(y) ? "" : ", " + y); 
} 
0

NotherDevは、厳密に言えば、そのような方法はで構築していないがあり、右でしたが、それでも@CodingGorilaソリューションは、私を助け、およびに追加する必要がありますLINQの「集計」メソッドを使用して、別の方法です私のアカウントによって次の.NETバージョン、私はまだ静的関数にそれを回すと、それはそれは私の状況で動作させるための文字列を返していなかったにもかかわらず:

public static string SmartJoin(string separator, params string[] Items) { 
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x)).ToArray()); 
} 
0

NotherDevは正しかった、厳密に言えば、そのようなはありませんメソッドの組み込みはできましたが、@コーディングゴリラのソリューションは助けになりました私、そして私はまだ静的関数にそれを回すと、それはそれは私の状況で動作させるための文字列を返していなかったものの、私のアカウントで次の.NETバージョンに追加する必要があります。

public static string SmartJoin(string separator, params string[] Items) { 
    return String.Join(separator, Items.Where(x=>!String.IsNullOrEmpty(x))); 
}