Ответ 1
using System.Linq
string.Join(",", member.Roles.Select(r => r.Name))
Скажем, у меня есть этот объект:
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);
- который не работает, потому что роль является сложным типом)?
using System.Linq
string.Join(",", member.Roles.Select(r => r.Name))
Если вы хотите только свойство 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);
Да, вы можете использовать перегрузку String.Join
(новая в .NET 4), которая принимает IEnumerable<String>
и немного Linq:
String joined = string.Join(",", member.Roles.Select(r => r.Name));
Еще одна опция - переопределить метод ToString()
класса Role
, чтобы вернуть то, что вы хотите, а затем просто выпустить этот оператор.
var joined = string.Join(",", member.Roles)