2012-08-16 25 views
17

Hãy nói rằng tôi có đối tượng này:Trong C#, có cách "dễ dàng" để thực hiện chuỗi không. Chỉ trong danh sách loại phức tạp?

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

Một thành viên có thể có nhiều vai trò: member.Roles = List<Role>();

Nếu tôi muốn tham gia vai trò của thành viên thành một dấu phẩy tách ra danh sách các tên vai trò, là có một cách dễ dàng cách (tương tự như string.Join(",", member.Roles); - không hoạt động vì vai trò là loại phức tạp)?

+0

Có thể sử dụng một cái gì đó như 'member.Roles.Select (x = > x.Name) .ToList () '? –

Trả lời

44
using System.Linq 

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

Đó là ý của tôi =) +1 –

+4

'bằng cách sử dụng System.Linq' –

+1

rock on, cảm ơn câu trả lời thực sự nhanh chóng (và Colonel Panic cho câu lệnh sử dụng!) – Chaddeus

5

Có, bạn có thể sử dụng sự quá tải của String.Join (mới trong .NET 4) mà phải mất một IEnumerable<String> và một chút của LINQ:

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

Một lựa chọn khác là để ghi đè lên các phương pháp ToString() của lớp học Role để trả lại những gì bạn muốn và sau đó chỉ phát hành tuyên bố này.

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

Nếu bạn chỉ muốn thuộc tính Name, sau đó câu trả lời khác là tốt

Nhưng nếu bạn có nhiều tài sản, điều chỉnh ToString() của bạn để phù hợp với:

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

vv và sau đó gọi nó như

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

Bạn sẽ không cần gọi số

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

vì nó sẽ được gọi trong nội bộ của đối tượng bên trong String.Join(), vì vậy nếu bạn ghi đè ToString(), bạn chỉ cần gọi

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

Tuyệt vời, cảm ơn mẹo! – Chaddeus

+1

Chỉ cần thanh lịch. +1 –

+0

@ DanielMarín: Cảm ơn :) –

Các vấn đề liên quan