2013-05-23 1 views
15

In meinem Code habe ich häufig die Sequenzen wie:Wie funktioniert das Listenverständnis (kompakte Möglichkeit, eine Liste in eine andere Liste umzuwandeln) in C#?

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

In Python, ich es als

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

Gibt es eine kompakte Art und Weise es in C# zu schreiben?

+1

Ihr Python Beispiel nicht wirklich eine Transformation, sondern eine Liste Verständnis. Siehe http://en.wikipedia.org/wiki/List_comprehension –

+0

Beachten Sie, dass Eric Lippert in diesem Fall die Verwendung von Foreach empfiehlt. Ich bin ein großer Fan von List Comprehensions, aber nachdem ich seinen Beitrag dazu gelesen habe (http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx) war ich überzeugt. –

Antwort

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

Oder:

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

Func Signatur sollte sein:

type2 YourTransformFunc(type1 value) 
{ 
} 

Edit:

Erweiterungsmethoden Select und ToList sind in System.Linq Namespace.

+0

Gibt es einen speziellen Namen/Modul für 'x => YourTransformFunc (x)' Art von Ausdruck? –

+4

@YuliaV Ja, es heißt Lambda-Ausdrücke. Lesen Sie zuerst über Delegaten und dann über [Lambda-Ausdrücke] (http://msdn.microsoft.com/en-us/library/bb397687.aspx). – Leri

+0

Lambda-Ausdruck? http://msdn.microsoft.com/en-us/library/bb397687.aspx – booyaa

7

Sie denken darüber nach:

list1.ForEach(x=> list2.Add(myTransformFunc(x)));