Подтвердить что ты не робот

В С# есть ли "простой" способ выполнения string.Join в списке сложных типов?

Скажем, у меня есть этот объект:

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); - который не работает, потому что роль является сложным типом)?

4b9b3361

Ответ 1

using System.Linq

string.Join(",", member.Roles.Select(r => r.Name))

Ответ 2

Если вы хотите только свойство 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);

Ответ 3

Да, вы можете использовать перегрузку String.Join (новая в .NET 4), которая принимает IEnumerable<String> и немного Linq:

String joined = string.Join(",", member.Roles.Select(r => r.Name));

Ответ 4

Еще одна опция - переопределить метод ToString() класса Role, чтобы вернуть то, что вы хотите, а затем просто выпустить этот оператор.

var joined = string.Join(",", member.Roles)