Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

ucel.net

LINQ i Labmda – to mi się podoba

Trochę się ostatnio bawiłem z Visual Studio 2008 i wersją 3.0 języka C#. A i w tym najbardziej reklamowanymi nowościami: LINQ i wyrażeniami lambda. I muszę powiedzieć, że wrażenia są bardzo, a to bardzo pozytywne.

Mówiąc szczerze na początku nieco się obawiałem, czy będę w stanie przekonać się do składni labda expressions, a samo ich wprowadzenie wydawało mi się pewnym rodzaju udziwnieniem. Ale wystarczyły mi dwa dni pracy z LINQ To Objects (czyli m.in. rozszerzeniem interfejsu IEnumerable<T>) i składnię opanowałem w stopniu conajmniej zadowalającym. I teraz zamiast:

string found = null;
foreach (string el in lista)
{
  
if (el.StartsWith("ABC"))
   {
      found = el;
     
break;
   }
}

piszę po prostu:

string found = lista.FirstOrDefault(el => el.StartsWith("ABC"));

O Statement Lambdas i ich zastosowaniu napiszę jeszcze kiedyś, bo to większy temat. A żeby było coś jeszcze o LINQ to mój faworyt: iteracja obiektów (nie wierszy!) zaznaczonych w gridzie posiadających niepustą interesującą mnie wartość:

foreach (IProjectInfo project in
        
from DataGridViewRow p in dgProjects.SelectedRows
        
let prj = p.DataBoundItem as IProjectInfo
         
where !String.IsNullOrEmpty(prj.Version)
        
select prj)
{
  
DoAction(prj);

Może nie wszyscy posiadający VS 2008 to wiedzą, ale środowisko zawiera świetny tutorial dla LINQ – polecam rozpakować sobie plik <Program Files>\Microsoft Visual Studio 9.0\Samples\1033\CSharpSamples.zip i skompilować projekt LinqSamples.sln. Naprawdę warto!

Opublikowane 22 lutego 2008 15:39 przez ucel
Filed under: , ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

 

Tarciu said:

O ile pierwszy przykład faktycznie robi wrażenie, to w drugim już nie bardzo widzę jakąś korzyść.

W czym jest to lepsze od "tradycyjnego" kodu?

foreach (DataGridViewRow row in dgProjects.SelectedRows){

   IProjectInfo project = row.DataBoundItem as IProjectInfo;

   if (!String.IsNullOrEmpty(project.Version))

       DoAction(project);

}

Tu już jest to chyba wyłącznie kwestia gustu :)

Generalnie nowe zmiany w C# bardzo mi się podobają, ale na używanie LINQ w tematach poza-bazodanowych jeszcze się nie przestawiłem. Proces w toku ;)

lutego 28, 2008 17:32

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij
W oparciu o Community Server (Personal Edition), Telligent Systems