The PIT
Röster från ITM-koncernen.

LINQ-tips

April 21, 2011 09:39 by Stefan Karlsson

Satt precis med ett litet projekt där jag laborerade med data från en GPS-puck. Datat skickade jag till en listbox för att se vad som kom från GPS-pucken:

image

Jag ville kunna spara datat till en fil och började då, precis som jag gjort 1000-tals gånger tidigare, att göra en loop som loopade igenom alla items i listboxen för att skriva ner datat till en fil. Det går självklart att göra på massor av olika sätt, nedan är de två vanligaste.

'Gammal metod 1, FOR EACH/NEXT
Dim FileContent1 As String = ""
For Each i As String In ListBox1.Items
    FileContent1 &= i & vbCrLf
Next
IO.File.WriteAllText(Application.StartupPath & "\gpsdata.txt", FileContent1)

'Gammal metod 2, FOR/NEXT
Dim FileContent2 As String = ""
For p As Integer = 0 To ListBox1.Items.Count - 1
    FileContent2 &= ListBox1.Items(p) & vbCrLf
Next
IO.File.WriteAllText(Application.StartupPath & "\gpsdata.txt", FileContent2)

 

Men så kom jag och tänka på LINQ.
Det borde gå att göra ett LINQ-fråga som skapar en array av listitems som gör att jag kan skriva ner allt till en fil med endast en rad kod. Genom att använda IO.File.WriteAllLines som tar en array av strängar och skapa en LINQ-fråga som returnerar en array av strängar från listboxens items så borde det alltså fungera, jag provade med nedanstående kod:

IO.File.WriteAllLines(filename, (From p As String In ListBox1.Items Select p).ToArray)

 

Vilket fungerade hur bra som helst! Men LINQ-frågan går att korta ner, “Select p” är vedertaget i LINQ-frågan så man behöver inte ange det, vilket gör att vi kan korta ner raden till detta:

IO.File.WriteAllLines(filename, (From p As String In ListBox1.Items).ToArray)

 

Slutsats

LINQ är häftigt, det är rent ut sagt sexigt! Men tänk på att det ibland kan vara svårt att förstå LINQ-kod, så även om den gör koden kompaktare så kan den även göra koden svårare att läsa i vissa fall, samt att man får tänka på LINQs “late evaluation”-teknik som kan ställa till det i andra sammanhang. Men i det här sammanhanget så tycker jag att LINQ gör koden mer lättläst och tar bort onödiga rader kod.

Det finns ett talesätt: Varje rad kod du INTE skriver är en rad du inte kan få en bugg i.

Over and out / Stefan


Tags:
Categories: .Net | LINQ | Tips
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Raytracer i LINQ!

February 26, 2009 10:43 by Stefan Karlsson

 

Droppar den här länken här. LukeH har gjort en raytracer i en enda linq-query!! Kanske inte så snabb men väldigt intressant. (Kolla även övriga inlägg i samma blogg)

http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx


Tags:
Categories: LINQ
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed