28

このオブジェクトがあるとしましょう:

public class Role {
    public string Name { get; set; }
    public string Slug { get; set; }
    public DateTime DateAssigned { get; set; }
    ...
}

メンバーは複数の役割を持つことができます:member.Roles = List<Role>();

メンバーのロールをロール名のカンマ区切りのリストに結合したい場合、簡単な方法はありますか (同様にstring.Join(",", member.Roles);、ロールが複雑なタイプであるため機能しません)?

4

5 に答える 5

69
using System.Linq

string.Join(",", member.Roles.Select(r => r.Name))
于 2012-08-16T13:16:47.207 に答える
11

Name プロパティのみが必要な場合は、他の答えが適切です

ただし、より多くのプロパティがある場合は、ToString()一致するように調整します。

public override String ToString()
{
    return String.Format("Name: {0}. Slug : {1}", Name, Slug);
}

など、それを次のように呼び出します

 String.Join(", ", member.Roles);

電話する必要はないでしょう

String.Join(", ", member.Roles.Select(x => x.ToString())

内部のオブジェクトによって内部的に呼び出されるString.Join()ため、オーバーライドする場合はToString()、呼び出すだけです

String.Join(", ", member.Roles);
于 2012-08-16T13:43:44.513 に答える
6

String.Joinはい、 (.NET 4の新機能) のオーバーロードを使用できます。これには、 IEnumerable<String>Linq が少し必要です。

String joined = string.Join(",", member.Roles.Select(r => r.Name));
于 2012-08-16T13:17:43.097 に答える
2

ToString()もう1つのオプションは、クラスのメソッドをオーバーライドしてRole必要なものを返し、このステートメントを発行することです。

var joined = string.Join(",", member.Roles)
于 2012-08-16T13:38:07.387 に答える
0

カンマ区切りの値で複数のプロパティを選択する場合:

var csvdata = member.Roles.Select(x => string.Join(",", new string[] { x.Name, x.Slug , x.DateAssigned}));
               

csv に複数のプロパティを選択する必要がありました。これは誰かを助けるかもしれません。

于 2022-02-01T13:19:55.467 に答える