2010-04-13 10 views
6

Ist es möglich, die Folowing mit Lambda (C#)Umschreiben eine Erklärung mit LINQ (C#)

private static void GetRecordList(List<CustomerInfo> lstCustinfo) 
{ 
    for (int i = 1; i <= 5; i++) 
    { 
     if (i % 2 == 0) 

      lstCustinfo.Add(new CustomerInfo { CountryCode = "USA", CustomerAddress = "US Address" + i.ToString(), CustomerName = "US Customer Name" + i.ToString(), ForeignAmount = i * 50 }); 

     else 
      lstCustinfo.Add(new CustomerInfo { CountryCode = "UK", CustomerAddress = "UK Address" + i.ToString(), CustomerName = "UK Customer Name" + i.ToString(), ForeignAmount = i * 80 }); 

    } 
} 
+1

ich bin neugierig, warum würdest du das als Lambda umschreiben wollen? Um es schwerer zu verstehen? –

+0

Vielleicht um das Geld für ein Obfuscator Tool zu speichern ...;) – gehho

+0

Nein .. Ich bin sehr neu zu Lambda und Linq .. Ich versuche, diese neuen Funktionen zu verwenden .. so whatevr schreibe ich mit foreach, ich versuche zu tun das gleiche in Linq oder Lambda .. Grundsätzlich möchte ich es lernen .. – Thinking

Antwort

7
List<CustomerInfo> lstCustinfo = 
    Enumerable.Range(1, 5).Select(i => (i % 2 == 0) 
     ? new CustomerInfo { CountryCode = "USA", CustomerAddress = "US Address" + i.ToString(), CustomerName = "US Customer Name" + i.ToString(), ForeignAmount = i * 50 } 
     : new CustomerInfo { CountryCode = "UK", CustomerAddress = "UK Address" + i.ToString(), CustomerName = "UK Customer Name" + i.ToString(), ForeignAmount = i * 80 }) 
    .ToList(); 
+1

Yup! Die Leute sollten über Enumerable.Range wissen .. es öffnet eine Menge Türen .. – puffpio

+2

Dies funktioniert offensichtlich und beantwortet die Frage, aber es scheint * viel * besser lesbar in der ursprünglichen Version! –

+3

Nun ist die Frage: Ist dieser Lambda-Ausdruck wirklich besser? Beim Zählen der Zeilen zum Schreiben für den Entwickler: ja. Wenn man die Lesbarkeit für andere Entwickler in Betracht zieht, die später den Code ändern müssen: absolut NEIN! Deshalb benutze ich keine Lambda-Ausdrücke sehr oft. – gehho

1

Sie müssen zuerst die Auswahl definieren zu schreiben, ist es dann in der Eingangsliste hinzufügen:

var range = Enumerable.Range(1, 5); 
var customers = from i in range 
       select (i % 2 == 0) ? 
         new CustomerInfo 
         { 
            CountryCode = "USA", 
            CustomerAddress = "US Address" + i, 
            CustomerName = "US Customer Name" + i, 
            ForeignAmount = i * 50 
         } 
         : 
         new CustomerInfo 
         { 
            CountryCode = "UK", 
            CustomerAddress = "UK Address" + i, 
            CustomerName = "UK Customer Name" + i, 
            ForeignAmount = i * 80 
         }; 

lstCustinfo.AddRange(customers); 

Oder vielleicht noch deutlicher:

var range = Enumerable.Range(1, 5); 
var usCustomers = from i in range 
        where i % 2 == 0 
       select new CustomerInfo 
         { 
            CountryCode = "USA", 
            CustomerAddress = "US Address" + i, 
            CustomerName = "US Customer Name" + i, 
            ForeignAmount = i * 50 
         }; 

var ukCustomers = from i in range 
       where i % 2 != 0 
       select new CustomerInfo 
         { 
            CountryCode = "UK", 
            CustomerAddress = "UK Address" + i, 
            CustomerName = "UK Customer Name" + i, 
            ForeignAmount = i * 80 
         }; 

lstCustinfo.AddRange(usCustomers.Union(ukCustomers));