2

いくつかのプロパティを持つオブジェクトがあります

例えば。

Employee
-Name
-Company

「-」で区切られた名と会社のフォーマットされた文字列を取得したい。

これで a を実行できますstring.Join("-", e.Company, e.Name)が、company が null または空の場合は "- fred" になります。

これらの空白/空の文字列を考慮に入れるためのより良い組み込みの方法はありますか? 以前はいくつかの省略形の if を使用して - を string.format に含めていましたが、かなり面倒です。

すなわち。

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

4 に答える 4

3

Joinメソッド 内でインライン 3 項を使用してみることができます。

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

編集(スペルミスで「fred」を読み間違えました)。
別の回答で述べたように、拡張メソッドはコードをクリーンアップします。醜いコードを別の場所に移動します。

拡張メソッドの代替として、後でより多くのパラメーターを許可する次のようなものをお勧めします。

  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"));

出力:

会社-フレッド

フレッド

会社

会社 - 1979 年 4 月 4 日

Company-Fred-1979 年 4 月 4 日

于 2013-06-19T02:50:24.060 に答える
0

住所など、2 つ以上の属性がある場合、これで問題が解決します。

List<string> attributes = new List<string>(new string[] {
    e.Company, 
    e.Name, 
    e.Address});
attributes.RemoveAll(s => s == String.Empty);
String.Join("-", attributes.ToArray());
于 2013-06-19T04:51:23.883 に答える
0

I doubt you're going to simplify this much more than you already have, but if this pattern is going to be used often, you could move the separator handling to an extension method to 'clean it up' a little;

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("-");
    }    
}
于 2013-06-19T04:11:37.533 に答える