0

拡張機能を使用してこれを行うことができることは知っていますが (私は で行いますStringBuilder)、必要な場合はもっと良い方法が必要だと感じています。名前と姓を組み合わせているとしましょう。どちらかが欠落している可能性があります (null または空、気にしないでください)。両方が存在する場合にのみスペースが必要です。そう

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

私に与えますJoe Smithが、決してJoe[trailingspace]または[leadingspace]Smith.

明らかにこれはばかげた例ですが、私はこれを現実の世界で常に行っています。より良いアイデアはありますか?

編集: String.Join を提案しないでください。うまくいきません。(支出者が以下で行うように、LINQ と組み合わせない限り。)

4

3 に答える 3

3

私は次のようなもので行きます:

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

}
于 2012-04-25T00:57:42.257 に答える
1

このブログからString.Join メソッド? 、配列と区切り記号を受け取る拡張メソッドを作成できますか?:

string[] input = {"Joe", null, "Smith"};
return input.Aggregate((x,y)=>String.IsNullOrEmpty(y)?x :String.Concat(x, " ", y));
于 2012-04-25T00:47:43.337 に答える
0

個人的には 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 */ }
    }
}
于 2012-04-25T00:59:30.913 に答える