Siehe Codezeile unten:
%Vor% In diesen Codezeilen habe ich _tables
reference und versuche auf sein System zuzugreifen define Funktionen GetType()
und Count()
, beide werfen Ausnahme, aber warum .Count()
throws System.ArgumentNullException
, da wir denselben Wert als Referenz haben was ist null
?
Count()
ist ein Erweiterungsmethode für IEnumerable<T>
, deklariert in System.Linq.Enumerable
- also rufst du eigentlich an:
... also _tables
ist ein Methodenargument, und es ist sinnvoll, dass die Ausnahme Ihnen das sagt. Sie deaktivieren die _tables
-Variable nicht wirklich, wenn Sie Count()
aufrufen, während Sie sind, wenn Sie GetType
aufrufen.
Weil Count
hier ein Aufruf einer Extension-Methode mit _tables
als Argument ist - es ist eigentlich:
Wenn Sie die Erweiterungsmethode nicht verwenden möchten, verwenden Sie _tables.Length
.
Weil es eine Erweiterungsmethode und keine Instanzmethode ist.
Da es nach Enumerable.Count(_tables)
kompiliert wurde, gilt es nicht für NullReferenceException
, es wird stattdessen nur ein ArgumentNullException
ausgegeben. % Co_de% ist jedoch eine Instanzmethode. Sie versuchen also, eine Methode für GetType
aufzurufen, was ... ähm, nicht funktioniert.
Count()
ist eine Erweiterungsmethode (sie sollte daher eine ArgumentNullException werfen, wenn ein übergebener Wert null ist und null ungültig ist), keine Methode für die Instanz des Objekts, dh Count
ist als public static int Count<T>(this IEnumerable<T> source)
definiert.
Tags und Links c# nullreferenceexception argumentexception