2013-05-23 57 views
15

Trong mã của tôi, tôi thường xuyên có các trình tự như sau:Làm thế nào để làm danh sách hiểu (cách nhỏ gọn để chuyển đổi một danh sách vào danh sách khác) trong C#?

List<type1> list1 = ...; 
List<type2> list2 = new List<type2>(); 
foreach(type1 l1 in list1) 
{ 
    list2.Add(myTransformFunc(l1)); 
} 

Trong Python, tôi có thể viết nó như

list2 = [myTransformFunc(l1) for l1 in list1] 

Có cách nào nhỏ gọn để viết nó trong C#?

+1

dụ python của bạn không thực sự là một chuyển đổi, nhưng một danh sách hiểu. Xem http://en.wikipedia.org/wiki/List_comprehension –

+0

Lưu ý rằng Eric Lippert đề xuất sử dụng foreach trong trường hợp này. Tôi là một fan hâm mộ lớn của danh sách comprehensions, nhưng sau khi đọc bài viết của mình về điều này (http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx) tôi đã bị thuyết phục. –

Trả lời

24
var newList = list.Select(x => YourTransformFunc(x)).ToList(); 

Hoặc:

var newList = list.Select(YourTransformFunc).ToList(); 

Func chữ ký nên là:

type2 YourTransformFunc(type1 value) 
{ 
} 

Edit:

phương pháp mở rộng SelectToList là trong System.Linq namespace.

+0

có tên/mô-đun đặc biệt cho loại biểu thức 'x => YourTransformFunc (x)' không? –

+4

@YuliaV Vâng, nó được gọi là biểu thức lambda. Đọc về các đại biểu đầu tiên và sau đó về [biểu thức lambda] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). – Leri

+0

biểu thức lambda? http://msdn.microsoft.com/en-us/library/bb397687.aspx – booyaa

7

Bạn đang suy nghĩ về điều này:

list1.ForEach(x=> list2.Add(myTransformFunc(x))); 
Các vấn đề liên quan