1. #1

    Registriert seit
    23.04.2014
    Beiträge
    21
    Thanked 5 Times in 3 Posts

    Standard Linq Unterschied zwischen First und FirstOrDefault?

    Hallo, ich habe heute angefangen mir Linq in C# anzuschauen. Verstehe aber nicht so richtig wo der Unterschied zwischen First und FirstOrDefault ist.

  2. #2
    Avatar von Sky.NET
    Registriert seit
    26.11.2011
    Beiträge
    2.462
    Thanked 2.717 Times in 1.286 Posts
    Blog Entries
    7

    Standard AW: Linq Unterschied zwischen First und FirstOrDefault?

    First wirft eine Exception, wenn nichts gefunden wurde, Default gibt NULL zurück wenn nichts gefunden wurde.

    Kannst du auch einfach selbst nachstellen:


    class Program
    {
    static void Main(string[] args)
    {
    List<string> list = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", "w", "e", "r" };


    string x = null;


    try
    {
    x = list.FirstOrDefault(y => y == "lol");
    Console.WriteLine(
    "Wert von x ist:" +
    (x == null ? "NULL" : x.ToString())
    );


    x = list.First(y => y == "lol");
    Console.WriteLine(
    "Wert von x ist:" +
    (x == null ? "NULL" : x.ToString())
    );
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }


    Console.ReadLine();
    }
    }
    Java:
    Spoiler:

    Lustige Quotes:
    Spoiler:
    Zitat Zitat von Hydra Beitrag anzeigen
    Hier (in Deutschland) kann man keine andere tolle Aktivitäten machen, als zu chillen, shoppen, saufen und Partys feiern xD Ich habe nichts gegen ab und zu mal saufen und Partys feiern, aber das ist doch nicht wirklich das wahre Leben o_o
    Wieso das Internet für die meisten Leute gefährlich ist:
    Zitat Zitat von Silent Beitrag anzeigen
    Ich weiß ja nicht was der Sinn dahinter steckt es heißt immer "security reasons".

  3. The Following User Says Thank You to Sky.NET For This Useful Post:

    Max899 (25.05.2014)

  4. #3

    Registriert seit
    19.11.2011
    Beiträge
    2.128
    Thanked 1.936 Times in 1.180 Posts

    Standard AW: Linq Unterschied zwischen First und FirstOrDefault?

    Gibt Default nicht den Datentyp zurück, mit dem gerade hantiert wird?

  5. The Following 2 Users Say Thank You to !lkay For This Useful Post:

    KingofRapx3 (01.06.2014)

  6. #4
    Gelöschter Benutzer
    Gast

    Standard AW: Linq Unterschied zwischen First und FirstOrDefault?

    @NightMareG:

    Vollkommen richtig, FirstOrDefault() gibt default(T) zurück, wenn kein Element gefunden wurde. Wenn wir zum Beispiel eine List haben die nur Integers hat und wir nach einem Element suchen, das nicht existiert, wird 0 zurück geben, weil default(int) == 0 ist.


    int v1 = TestList.Where (o => o == 5).FirstOrDefault ();
    Console.WriteLine (v1.ToString ()); // --> 0


    Das Codebeispiel von Sky macht wenig Sinn, weil er zwei mal dieselbe Variable (string x) nimmt und nach dem First() Test nicht zurück auf "null" setzt.

    Um also zu überprüfen um wir was in der Liste gefunden haben, sollte man folgendes nutzen:


    int v1 = TestList.Where (o => o == 5).FirstOrDefault ();
    if(v1 != default(int)) {
    //Was gefunden
    } else {
    //Nichts gefunden
    }


    Dasselbe geht natürlich auch mit Klassen (PTR):


    class TestClass
    {
    public string Test { get; set; }
    public int Number { get; set; }
    }

    public static void Main (string[] args)
    {
    List<TestClass> TestList = new List<TestClass> ()
    {
    new TestClass { Test = "Hi", Number = 3 },
    new TestClass { Test = "Test", Number = 61 }
    };

    TestClass test = TestList.Where(o => o.Test == "Hi").FirstOrDefault();
    if (test == default(TestClass))
    Console.WriteLine ("Nope!");
    }


    tl:dr; FirstOrDefault() returned default(T) (wenn kein Element gefunden wurde) und man überprüft mit (ret == default(objectType)) ob es null ist oder nicht.
    Geändert von Gelöschter Benutzer (26.05.2014 um 14:25 Uhr)

  7. The Following 4 Users Say Thank You to Gelöschter Benutzer For This Useful Post:

    Benzol (26.05.2014), DMW007 (26.05.2014), KingofRapx3 (01.06.2014), Sky.NET (26.05.2014)

  8. #5
    Avatar von Sky.NET
    Registriert seit
    26.11.2011
    Beiträge
    2.462
    Thanked 2.717 Times in 1.286 Posts
    Blog Entries
    7

    Standard AW: Linq Unterschied zwischen First und FirstOrDefault?

    Zitat Zitat von Finn Beitrag anzeigen
    Das Codebeispiel von Sky macht wenig Sinn, weil er zwei mal dieselbe Variable (string x) nimmt und nach dem First() Test nicht zurück auf "null" setzt.
    Reallife = haste recht, aber reallife würde ich ohnehin nichts mit First machen, sondern FirstOrDefault benutzen wann immer das der Fall zulässt
    In diesem Fall = es ist völlig egal was nach diesem Aufruf in Zeile 20 passiert, denn da er das Element nicht findet, schmeißt er eine Exception, auch wenn ich das Element wieder auf null setzen würde.

    Nichts desto Trotz hast du mit deiner Erklärung natürlich auch recht und an die Prüfung mit default(T) hab ich nicht gedacht, danke für die Ergänzung.
    Java:
    Spoiler:

    Lustige Quotes:
    Spoiler:
    Zitat Zitat von Hydra Beitrag anzeigen
    Hier (in Deutschland) kann man keine andere tolle Aktivitäten machen, als zu chillen, shoppen, saufen und Partys feiern xD Ich habe nichts gegen ab und zu mal saufen und Partys feiern, aber das ist doch nicht wirklich das wahre Leben o_o
    Wieso das Internet für die meisten Leute gefährlich ist:
    Zitat Zitat von Silent Beitrag anzeigen
    Ich weiß ja nicht was der Sinn dahinter steckt es heißt immer "security reasons".

Ähnliche Themen

  1. Unterschied zwischen den Automarken?
    Von DiscoDieter im Forum Fahrzeuge
    Antworten: 3
    Letzter Beitrag: 25.07.2020, 20:39
  2. Antworten: 7
    Letzter Beitrag: 04.04.2014, 19:54
  3. Unterschied zwischen Supermarkt und Discounter?
    Von Peter90 im Forum RealLife
    Antworten: 1
    Letzter Beitrag: 18.03.2014, 21:11
  4. Antworten: 2
    Letzter Beitrag: 02.02.2014, 13:46
  5. Antworten: 12
    Letzter Beitrag: 19.06.2012, 00:04
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.