


C# First () gegen FirstorDefault (): Was ist der Unterschied?
Der Kernunterschied zwischen First () und FirstOrneFault () ist das Verhalten, wenn das Element nicht gefunden werden kann. 1.. First () löst eine InvalidoperationException -Ausnahme aus, wenn das Element nicht gefunden werden kann, was für Szenarien geeignet ist, in denen das Set nicht leer ist oder aktiv behandelt werden muss. 2. FirstorDefault () gibt den Standardwert zurück, wenn das Element nicht gefunden werden kann 3. Die Auswahlbasis hängt von der Toleranz der Geschäftslogik gegenüber "kein Matching -Ergebnis" ab. Wenn das erwartete Ergebnis vorhanden sein muss, verwenden Sie first (), ansonsten FirstOrneFault (); 4. Die Leistungsunterschiede zwischen den beiden kann ignoriert werden, aber häufige Auslösen von Ausnahmen wirken sich auf die Leistung aus. Daher wird empfohlen, Firstorderault () zuerst zu verwenden, um die Code -Robustheit zu verbessern.
Bei der Verwendung von C# für Sammlungsvorgänge, insbesondere bei der Kombination von LINQ -Abfragen, sind First()
und FirstOrDefault()
zwei sehr häufig verwendete Erweiterungsmethoden. Sie sehen ähnlich aus, aber es gibt einen wesentlichen Unterschied im Verhalten: Eine besteht darin, Ausnahmen zu werfen, und die anderen gibt Standardwerte zurück .

1.. First()
: Eine Ausnahme wird ausgelöst, wenn das Element nicht gefunden werden kann
Wenn Sie die First()
-Methode aufrufen, versucht sie, das erste Element in der Sammlung zurückzugeben, das die Bedingung erfüllt. Wenn die Sammlung leer ist oder es keine Elemente gibt, die den Kriterien entsprechen, wird eine InvalidOperationException
-Ausnahme ausgelöst.
var list = new List <int> {1, 2, 3}; int result = list.First (x => x> 3); // Wirf eine Ausnahme, weil kein Element den Zustand erfüllt
- Anwendbare Szenarien :
- Sie sind sicher, dass das Set nicht leer sein darf.
- Oder Sie möchten sofort mit Ausnahmelogik handeln, wenn das Element nicht gefunden wird.
Tipp: Wenn Sie nicht planen, Ausnahmen zu handhaben, sollten Sie nicht
First()
beiläufig verwenden, da das Programm leicht zum Absturz gebracht wird.
2. FirstOrDefault()
: Das Element kann nicht gefunden werden und gibt den Standardwert zurück
Diese Methode verhält sich ähnlich wie First()
, bringt aber keine Ausnahme. Wenn kein Element gefunden wird, gibt es den Standardwert des Typs zurück - als Referenztyp ist es null
, für Werttypen wie int
, bool
usw. ist es 0
, false
usw.
var list = new List <int> {1, 2, 3}; int result = list.firstordeFault (x => x> 3); // Rückkehr 0, es wird keine Ausnahme ausgeworfen
- Anwendbare Szenarien :
- Ich bin mir nicht sicher, ob die Sammlung eine Übereinstimmung enthält.
- Ich möchte eine Ausnahme -Handhabungslogik vermeiden und den Code prägnanter und sicherer machen.
Hinweis: Hier gibt es eine kleine Grube. Wenn es
int?
(Nullable Ganzzahl) Wenn es nicht gefunden werden kann, wirdnull
anstelle von0
zurückgegeben. Achten Sie also darauf, festzustellen, ob das Ergebnis null ist.![]()
3. Wie kann man wählen?
Einfach sagen:
- Wenn Sie ein Ergebnis erwarten und kein Ergebnis ein Fehler ist , verwenden Sie
First()
. - Wenn Sie Situationen akzeptieren, in denen möglicherweise keine Ergebnisse vorhanden sind , verwenden Sie
FirstOrDefault()
.
Zum Beispiel:
- Suchen Sie die aktuellen Benutzerinformationen:
First()
sollte verwendet werden, da der aktuell angemeldete Benutzer im System vorhanden sein sollte. - Suchen Sie den letzten Auftragsdatensatz des Benutzers: Sie können
FirstOrDefault()
verwenden, da der Benutzer möglicherweise noch keine Bestellung aufgegeben hat.
4. Gibt es irgendwelche Leistungsunterschiede?
Aus der internen Implementierung können die Leistungsunterschiede zwischen diesen beiden Methoden ignoriert werden. Sie sind alle lineare Lookups und kehren zurück, sobald das erste Spiel gefunden wurde.
Es ist jedoch wichtig zu beachten:
- Bei der Verwendung von
First()
wird die Leistung beeinträchtigt, wenn Ausnahmen häufig ausgelöst werden (Ausnahmebehandlung selbst ist teurer). - Aus Sicht der Leistung wird daher empfohlen, zuerst
FirstOrDefault()
zu verwenden, wenn Ihre Codelogik häufig auf" NO -Übereinstimmungssituationen "begegnet wird.
Grundsätzlich ist das. Die Wahl zwischen den beiden betrifft tatsächlich mehr darüber, wie viel Ihre Geschäftslogik "Daten nicht gefunden" als Leistung oder Komplexitätsprobleme tolerieren soll.
Das obige ist der detaillierte Inhalt vonC# First () gegen FirstorDefault (): Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die TPL von C#vereinfacht die parallele Aufgabenverarbeitung durch die Aufgabenklasse. 1. verwenden Sie task.run () oder task.factory.startNew (), um die Aufgabe zu starten, und empfehlen Sie den ersteren; 2. Erhalten Sie das Ergebnis durch Aufgabe und warten Sie auf die Fertigstellung mit Warte- oder. 1. Verwenden Sie die Aufgabe. WhenAll (), um mehrere Aufgaben parallel auszuführen, achten Sie auf den Ressourcenwettbewerb. V. 5. Verwenden Sie CancellationTokenSource, um die Aufgabe zu stornieren, die für Zeitüberschreitungs- oder Benutzer -Stornierungsszenarien geeignet ist. Achten Sie gleichzeitig auf, um zu vermeiden, dass synchroner und asynchroner Code gemischt werden, um Deadlockprobleme zu verhindern.

Bei der Verwendung von var sollte es anhand der Klarheit des Typs ermittelt werden und ob die Lesbarkeit betroffen ist. 1. Wenn der Typ auf der rechten Seite der Zuordnung klar ist, wie z. B. varlist = newList (); kann die Codes -Einfachheit verbessern; 2. Wenn der Typ fuzzy ist oder zum Objekt- oder Schnittstellentyp zurückkehrt, sollte Var vermieden werden, wie z. Verbesserung der Lesbarkeit; 3.. Verwenden Sie Varizen in anonymen Typen und LINQ -Abfragen, z. B. anonyme Objekte empfangen, aber eine anschließende Verarbeitung wird empfohlen, um sie als spezifischen Typ zu verkörpern. 4. In Teamprojekten sollte der Codierungsstil einheitlich sein, und Var sollte vernünftigerweise durch .DitorConfig oder Code -Überprüfung verwendet werden, um Missbrauch zu vermeiden und die Wartung zu beeinflussen.

Der Vergleich von Zeichenfolgen in C# sollte auf der Szenenauswahlmethode basieren. Der == Operator ist standardmäßig Fallempfindlichkeit und ist basierend auf der aktuellen Kultur verglichen, ist jedoch nicht für komplexe Szenarien geeignet. 1. Die Verwendung des == Operators ist zum schnellen Vergleich geeignet, erfüllt jedoch möglicherweise nicht die erwarteten Ergebnisse aufgrund von Kultur oder Fall. 2. Verwenden von String.equals () und Passing in String Comparison -Aufzählung können eine genauere Kontrolle erreichen, wie z. B. Ordinal, ordinalignorecase, invariantculture usw.; 3. Achten Sie beim Vergleich auf die Behandlung von Null- oder leeren Saiten. Es wird empfohlen, die statische Methode für String.equals () oder die String zu verwenden. Isnullorempt zuerst.

Um eine Verbindung zu einer SQLServer -Datenbank herzustellen, besteht die häufigste Möglichkeit, die SQLConnection -Klasse in ado.net zu verwenden. 1. Sie müssen das Paket microsoft.data.sqlclient installieren und auf den Namespace verweisen. 2. Schreiben Sie eine Verbindungszeichenfolge, die die Serveradresse, den Datenbanknamen und die Authentifizierungsinformationen enthält. 3.. Verwenden und versuchen Sie es mit dem Catch, eine Verbindung herzustellen und Abfragen auszuführen, wodurch die Ressourcenveröffentlichung und die Ausnahmebehandlung sichergestellt werden. 4. Häufige Probleme sind Remoteverbindungseinstellungen, Firewall -Konfiguration, Port -Release- und Anmeldeberechtigungen usw. und müssen einzeln überprüft werden.

Es gibt zwei allgemeine Möglichkeiten, die Zeile der Textdateien nach Zeile in C#zu lesen: Verwenden von StreamReader und Datei.readlines (). 1. Die Readline () -Methode von StreamReader eignet sich für die Verarbeitung großer Dateien, Lesen Sie die Zeile für Schleife und ist speicherfreundlich und verwendet verwendet, um die Ressourcenfreigabe zu gewährleisten. 2. Datei.Readlines () bietet einen kurzen Code, der für Szenarien geeignet ist, die nur einmal durchquert werden müssen, faulen Laden unterstützt und Codierung angeben können. Wenn Sie mehrmals auf den Dateiinhalt zugreifen müssen, wird file.readalllines () empfohlen. Die beiden erkennen die Codierung automatisch standardmäßig. Um verstümmelten Code zu vermeiden, wird empfohlen, die Codierung.UTF8 und ENC nach Bedarf explizit anzugeben.

C#CANBEUSEUTFORSCIENTIFISCHCOMPUTINGANDDATAANYSEBYSETINGUPAPROPERENVIRIONENT, LeveragingRelevantlibrary und optimizingPerformance.First, InstallvisualStudioorvScodewiththe.netsdkastheFoundation.Next, uenugetpackagesslikemath.NetNETERICHERICRALALGELALGERALGE

Durch die Auswahl des richtigen Sammlungstyps kann die C# -Programmleistung erheblich verbessert werden. 1. Fügen Sie die verlinkte Liste häufig in die Mitte ein oder löschen Sie sie in der Mitte, 2. Suchen Sie schnell mit Hashset oder Wörterbuch, 3. Die Anzahl der Elemente wurde zuerst Arrays verwendet, 4. Wählen Sie Hashset, wenn eindeutige Werte erforderlich sind.

In C#wird das statische Schlüsselwort verwendet, um Mitglieder des Typs selbst zu definieren, und kann ohne Instanziierung zugegriffen werden. 1. statische Variablen werden von allen Fällen der Klasse geteilt und sind für die Verfolgung des globalen Zustands geeignet, z. B. die Anzahl der Instanziierung der Klasse aufzuzeichnen. 2. statische Methoden gehören eher zu Klassen als zu Objekten und können nicht direkt auf nicht statische Mitglieder zugreifen und werden häufig in Helferfunktionen in Werkzeugklassen verwendet. 3.. Statische Klassen können nicht instanziiert werden und enthalten nur statische Mitglieder. Sie eignen sich für die Organisation staatenloser praktischer Methoden, können jedoch keine Schnittstellen erben oder implementieren. Wenn Sie es verwenden, müssen Sie auf das Speichermanagement und die Sicherheit von Thread -Sicherheit achten.
