0

以下に示すようにList<Accrual>List<Brand>(および他の多くの同様のオブジェクト)があります。List<string>usingからカンマ区切りの文字列を作成する必要がありますString.Join

    public static string GetCommaSeparatedString(List<string> input)
    {
        return String.Join(",", input);
    }
  1. メソッドにList<Accrual>a を渡す必要がある場合List<Description>
  2. メソッドにList<Brand>a を渡す必要がある場合List<Name>

最小限のコード行数で最も読みやすい方法でそれを実現するにはどうすればよいでしょうか?

注:.Net 4.0を使用しています

クラスの例

public class Accrual
{
    public string Code { get; set; }
    public string Description { get; set; }

}

public class Brand
{
    public int Number { get; set; }
    public string Name { get; set; }
}
4

3 に答える 3

8

ToStringまず、メソッドをオーバーライドできます。

public class Brand
{
    public int Number { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

void Method()
{
    var brands = new List<Brand>()
    {
        new Brand { Number = 1, Name = "a" },
        new Brand { Number = 2, Name = "b" }
    };
    // outputs: a,b
    Console.WriteLine(string.Join(",", brands));
}

次に、Linq を使用して名前を取得し、結合することができます。

var brandsNames = brands.Select(i => i.Name);
string joinedNames = string.Join(",", brandsNames);

そのためのジェネリックメソッドが本当に必要な場合は、これを使用できます(少なくともこの場合は何も提供しませんが)、これはまだオーバーライドされたToStringメソッドを使用しています:

public static class Formatter
{
    public static string GetCommaSeparatedString<T>(IEnumerable<T> input)
    {
        return string.Join(",", input);
    }
}
// and then
string brandsStrings = Formatter.GetCommaSeparatedString<Brand>(brands);
// or just
string brandsStrings = Formatter.GetCommaSeparatedString(brands);
于 2013-08-17T09:39:03.810 に答える
3

まず、GetCommaSeparatedStringメソッド シグネチャをサポートするIEnumerable<string>代わりに変更List<string>し、それを拡張メソッドに変換します。

public static string GetCommaSeparatedString(this IEnumerable<string> input)
{
    return String.Join(",", input);
}

次に、次のようにします。

var accDescrs = listAccruals.Select(x => x.Description).GetCommaSeparatedString();
var brndNames = listBrands.Select(x => x.Name).GetCommaSeparatedString();
于 2013-08-17T09:41:37.343 に答える
0
public static string SeparateByCommas<T, TProp>(this IEnumerable<T> source, Expression<Func<T, TProp>> expression)
{
    var memberExpression = expression.Body as MemberExpression;
    if (memberExpression == null)
        return string.Empty;

    var propName = memberExpression.Member.Name;
    return source.Aggregate(new StringBuilder(), (builder, t) =>
           {
               builder.Append(typeof (T).GetProperty(propName).GetValue(t).ToString());
               builder.Append(",");
               return builder;
           }).ToString();
}

var test = new List<Brand>
{
   new Brand
   {
     Number = 1,
     Name = "a"
   },
   new Brand
   {
     Number = 2,
     Name = "b"
   }
};


string separateByCommas = test.SeparateByCommas(brand => brand.Name);
于 2013-08-17T09:46:20.770 に答える