Verwenden des Equals -Schlüsselworts in linq [Duplicate
-
27-10-2019 - |
Frage
Mögliches Duplikat:
Lambda Ausdruck: == vs. .equals ()
Hi,
Ich verwende viel das Schlüsselwort, um Variablen und andere Dinge zu vergleichen.
aber
wines = wines.Where(d => d.Region.Equals(paramRegion)).ToList();
Gibt einen Fehler zur Laufzeit zurück, wenn in der Datenregion null ist
Ich musste den Code verwenden
wines = wines.Where(d => d.Region == paramRegion).ToList();
den Fehler loswerden.
Irgendwelche Ideen, warum dies einen Fehler aufwirft?
Vielen Dank.
Lösung
Sie können Instanzmethoden mit Null -Objektreferenz nicht aufrufen. Sie sollten überprüfen, ob die Region nicht null ist, bevor Sie ihre Instanzmethoden aufrufen.
wines = wines.Where(d => d.Region != null && d.Region.Equals(paramRegion)).ToList();
Das d.Region == paramRegion
wird (höchstwahrscheinlich) erweitert auf object.Equals(d.Region, paramRegion)
und diese statische Methode prüft, ob die Parameter null sind oder nicht, bevor Sie die Equals () -Methode aufrufen.
Sie können die Bedingung auch in unterschiedlicher Reihenfolge schreiben, wenn Sie wissen, dass die paramRegion
kann nicht Null sein.
Debug.Assert(paramRegion != null);
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList();
Andere Tipps
Grundsätzlich wenn
d.Region == null
dann jeder Methode -Anruf, hier ist es Gleich (...) Auf diese Weise wird eine Ausnahme einbezogen, da es nicht initialisiert wird.
Verwendung kann verwenden:
paramRegion.Equals(d.Region)