NullReferenceException Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Die Ausnahme, die ausgelöst wird, wenn versucht wird, einen Null-Objektverweis abzuleiten.
public ref class NullReferenceException : Exception
public ref class NullReferenceException : SystemException
public class NullReferenceException : Exception
public class NullReferenceException : SystemException
[System.Serializable]
public class NullReferenceException : SystemException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class NullReferenceException : SystemException
type NullReferenceException = class
inherit Exception
type NullReferenceException = class
inherit SystemException
[<System.Serializable>]
type NullReferenceException = class
inherit SystemException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type NullReferenceException = class
inherit SystemException
Public Class NullReferenceException
Inherits Exception
Public Class NullReferenceException
Inherits SystemException
- Vererbung
- Vererbung
- Attribute
Hinweise
Eine NullReferenceException Ausnahme wird ausgelöst, wenn Sie versuchen, auf ein Element eines Typs zuzugreifen, dessen Wert lautet null. Eine NullReferenceException Ausnahme spiegelt in der Regel den Entwicklerfehler wider und wird in den folgenden Szenarien ausgelöst:
Note
Sie können die meisten NullReferenceException Ausnahmen in C# vermeiden, indem Sie den Null-bedingten Operator (?.) oder den Null-Koalzoperator () verwenden??. Weitere Informationen finden Sie unter Nullable-Verweistypen. In den folgenden C#-Beispielen wird davon ausgegangen, dass der Null-Kontext deaktiviert ist (nicht empfohlen).
Sie haben vergessen, einen Verweistyp instanziieren zu können. Im folgenden Beispiel wird deklariert,
namesaber nie instanziiert (die betroffene Zeile wird im C#-Beispiel auskommentiert, da sie nicht kompiliert wird):using System.Collections.Generic; public class UseBeforeAssignExample { public static void Main(string[] args) { int value = int.Parse(args[0]); List<string> names; if (value > 0) names = []; //names.Add("Major Major Major"); } } // Compilation displays a warning like the following: // warning BC42104: Variable //names// is used before it // has been assigned a value. A null reference exception could result // at runtime. // // names.Add("Major Major Major") // ~~~~~ // The example displays output like the following output: // Unhandled Exception: System.NullReferenceException: Object reference // not set to an instance of an object. // at UseBeforeAssignExample.Main()open System [<EntryPoint>] let main args = let value = Int32.Parse args[0] // Set names to null, don't initialize it. let mutable names = Unchecked.defaultof<ResizeArray<string>> if value > 0 then names <- ResizeArray() names.Add "Major Major Major" 0 // Compilation does not display a warning as this is an extremely rare occurance in F#. // Creating a value without initalizing either requires using 'null' (not possible // on types defined in F# without [<AllowNullLiteral>]) or Unchecked.defaultof. // // The example displays output like the following output: // Unhandled Exception: System.NullReferenceException: Object reference // not set to an instance of an object. // at Example.main()Imports System.Collections.Generic Module Example Public Sub Main() Dim names As List(Of String) names.Add("Major Major Major") End Sub End Module ' Compilation displays a warning like the following: ' Example1.vb(10) : warning BC42104: Variable 'names' is used before it ' has been assigned a value. A null reference exception could result ' at runtime. ' ' names.Add("Major Major Major") ' ~~~~~ ' The example displays output like the following output: ' Unhandled Exception: System.NullReferenceException: Object reference ' not set to an instance of an object. ' at Example.Main()Einige Compiler geben beim Kompilieren dieses Codes eine Warnung aus. Andere geben einen Fehler aus, und die Kompilierung schlägt fehl. Um dieses Problem zu beheben, instanziieren Sie das Objekt so, dass der Wert nicht mehr
nullist. Im folgenden Beispiel wird dies durch Aufrufen des Klassenkonstruktors eines Typs ausgeführt.using System.Collections.Generic; public class AnotherExample { public static void Main() { List<string> names = ["Major Major Major"]; } }let names = ResizeArray() names.Add "Major Major Major"Imports System.Collections.Generic Module Example Public Sub Main() Dim names As New List(Of String)() names.Add("Major Major Major") End Sub End ModuleSie haben vergessen, ein Array zu dimensionieren, bevor Sie es initialisieren. Im folgenden Beispiel wird als ganzzahliges Array deklariert,
valuesaber die Anzahl der darin enthaltenen Elemente wird nie angegeben. Der Versuch, seine Werte zu initialisieren, löst daher eine NullReferenceException Ausnahme aus.int[] values = null; for (int ctr = 0; ctr <= 9; ctr++) values[ctr] = ctr * 2; foreach (int value in values) Console.WriteLine(value); // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object. // at Array3Example.Main()let values: int[] = null for i = 0 to 9 do values[i] <- i * 2 for value in values do printfn $"{value}" // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object. // at <StartupCode$fs>.main()Module Example Public Sub Main() Dim values() As Integer For ctr As Integer = 0 To 9 values(ctr) = ctr * 2 Next For Each value In values Console.WriteLine(value) Next End Sub End Module ' The example displays the following output: ' Unhandled Exception: ' System.NullReferenceException: Object reference not set to an instance of an object. ' at Example.Main()Sie können die Ausnahme beseitigen, indem Sie die Anzahl der Elemente im Array deklarieren, bevor Sie sie initialisieren, wie im folgenden Beispiel.
int[] values = new int[10]; for (int ctr = 0; ctr <= 9; ctr++) values[ctr] = ctr * 2; foreach (int value in values) Console.WriteLine(value); // The example displays the following output: // 0 // 2 // 4 // 6 // 8 // 10 // 12 // 14 // 16 // 18let values = Array.zeroCreate<int> 10 for i = 0 to 9 do values[i] <- i * 2 for value in values do printfn $"{value}" // The example displays the following output: // 0 // 2 // 4 // 6 // 8 // 10 // 12 // 14 // 16 // 18Module Example Public Sub Main() Dim values(9) As Integer For ctr As Integer = 0 To 9 values(ctr) = ctr * 2 Next For Each value In values Console.WriteLine(value) Next End Sub End Module ' The example displays the following output: ' 0 ' 2 ' 4 ' 6 ' 8 ' 10 ' 12 ' 14 ' 16 ' 18Weitere Informationen zum Deklarieren und Initialisieren von Arrays finden Sie unter Arrays und Arrays.
Sie erhalten einen Null-Rückgabewert aus einer Methode und rufen dann eine Methode für den zurückgegebenen Typ auf. Dies ist manchmal das Ergebnis eines Dokumentationsfehlers; In der Dokumentation wird nicht beachtet, dass ein Methodenaufruf zurückgegeben
nullwerden kann. In anderen Fällen geht der Code fälschlicherweise davon aus, dass die Methode immer einen Wert ungleich NULL zurückgibt.Der Code im folgenden Beispiel geht davon aus, dass die Array.Find Methode immer ein Objekt zurückgibt
Person, dessenFirstNameFeld einer Suchzeichenfolge entspricht. Da keine Übereinstimmung vorhanden ist, löst die Laufzeit eine Ausnahme aus NullReferenceException .public static void NoCheckExample() { Person[] persons = Person.AddRange([ "Abigail", "Abra", "Abraham", "Adrian", "Ariella", "Arnold", "Aston", "Astor" ]); string nameToFind = "Robert"; Person found = Array.Find(persons, p => p.FirstName == nameToFind); Console.WriteLine(found.FirstName); } // The example displays the following output: // Unhandled Exception: System.NullReferenceException: // Object reference not set to an instance of an object.open System type Person(firstName) = member _.FirstName = firstName static member AddRange(firstNames) = Array.map Person firstNames let persons = [| "Abigail"; "Abra"; "Abraham"; "Adrian" "Ariella"; "Arnold"; "Aston"; "Astor" |] |> Person.AddRange let nameToFind = "Robert" let found = Array.Find(persons, fun p -> p.FirstName = nameToFind) printfn $"{found.FirstName}" // The example displays the following output: // Unhandled Exception: System.NullReferenceException: // Object reference not set to an instance of an object. // at <StartupCode$fs>.main()Module Example Public Sub Main() Dim persons() As Person = Person.AddRange( { "Abigail", "Abra", "Abraham", "Adrian", "Ariella", "Arnold", "Aston", "Astor" } ) Dim nameToFind As String = "Robert" Dim found As Person = Array.Find(persons, Function(p) p.FirstName = nameToFind) Console.WriteLine(found.FirstName) End Sub End Module Public Class Person Public Shared Function AddRange(firstNames() As String) As Person() Dim p(firstNames.Length - 1) As Person For ctr As Integer = 0 To firstNames.Length - 1 p(ctr) = New Person(firstNames(ctr)) Next Return p End Function Public Sub New(firstName As String) Me.FirstName = firstName End Sub Public FirstName As String End Class ' The example displays the following output: ' Unhandled Exception: System.NullReferenceException: ' Object reference not set to an instance of an object. ' at Example.Main()Um dieses Problem zu beheben, testen Sie den Rückgabewert der Methode, um sicherzustellen, dass sie nicht
nullvor dem Aufrufen eines seiner Member liegt, wie im folgenden Beispiel gezeigt.public static void ExampleWithNullCheck() { Person[] persons = Person.AddRange([ "Abigail", "Abra", "Abraham", "Adrian", "Ariella", "Arnold", "Aston", "Astor" ]); string nameToFind = "Robert"; Person found = Array.Find(persons, p => p.FirstName == nameToFind); if (found != null) Console.WriteLine(found.FirstName); else Console.WriteLine($"'{nameToFind}' not found."); } // The example displays the following output: // 'Robert' not foundopen System [<AllowNullLiteral>] type Person(firstName) = member _.FirstName = firstName static member AddRange(firstNames) = Array.map Person firstNames let persons = [| "Abigail"; "Abra"; "Abraham"; "Adrian" "Ariella"; "Arnold"; "Aston"; "Astor" |] |> Person.AddRange let nameToFind = "Robert" let found = Array.Find(persons, fun p -> p.FirstName = nameToFind) if found <> null then printfn $"{found.FirstName}" else printfn $"{nameToFind} not found." // Using F#'s Array.tryFind function // This does not require a null check or [<AllowNullLiteral>] let found2 = persons |> Array.tryFind (fun p -> p.FirstName = nameToFind) match found2 with | Some firstName -> printfn $"{firstName}" | None -> printfn $"{nameToFind} not found." // The example displays the following output: // Robert not found. // Robert not found.Module Example Public Sub Main() Dim persons() As Person = Person.AddRange( { "Abigail", "Abra", "Abraham", "Adrian", "Ariella", "Arnold", "Aston", "Astor" } ) Dim nameToFind As String = "Robert" Dim found As Person = Array.Find(persons, Function(p) p.FirstName = nameToFind) If found IsNot Nothing Then Console.WriteLine(found.FirstName) Else Console.WriteLine("{0} not found.", nameToFind) End If End Sub End Module Public Class Person Public Shared Function AddRange(firstNames() As String) As Person() Dim p(firstNames.Length - 1) As Person For ctr As Integer = 0 To firstNames.Length - 1 p(ctr) = New Person(firstNames(ctr)) Next Return p End Function Public Sub New(firstName As String) Me.FirstName = firstName End Sub Public FirstName As String End Class ' The example displays the following output: ' Robert not foundSie verwenden einen Ausdruck (z. B. eine Liste von Methoden oder Eigenschaften miteinander verkettet), um einen Wert abzurufen. Obwohl Sie überprüfen, ob der Wert ist
null, löst die Laufzeit weiterhin eine Ausnahme aus NullReferenceException . Dies tritt auf, da einer der Zwischenwerte im Ausdruck zurückgegeben wirdnull. Daher wird Ihr Test nienullausgewertet.Im folgenden Beispiel wird ein
PagesObjekt definiert, das Informationen zu Webseiten zwischenspeichert, die vonPageObjekten dargestellt werden. DieExample.MainMethode überprüft, ob die aktuelle Webseite einen Titel ungleich NULL aufweist und in diesem Fall den Titel anzeigt. Trotz dieser Überprüfung löst die Methode jedoch eine Ausnahme aus NullReferenceException .public class Chain1Example { public static void Main() { var pages = new Pages(); if (!string.IsNullOrEmpty(pages.CurrentPage.Title)) { string title = pages.CurrentPage.Title; Console.WriteLine($"Current title: '{title}'"); } } } public class Pages { readonly Page[] _page = new Page[10]; int _ctr = 0; public Page CurrentPage { get { return _page[_ctr]; } set { // Move all the page objects down to accommodate the new one. if (_ctr > _page.GetUpperBound(0)) { for (int ndx = 1; ndx <= _page.GetUpperBound(0); ndx++) _page[ndx - 1] = _page[ndx]; } _page[_ctr] = value; if (_ctr < _page.GetUpperBound(0)) _ctr++; } } public Page PreviousPage { get { if (_ctr == 0) { if (_page[0] is null) return null; else return _page[0]; } else { _ctr--; return _page[_ctr + 1]; } } } } public class Page { public Uri URL; public string Title; } // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object. // at Chain1Example.Main()open System type Page() = [<DefaultValue>] val mutable public URL: Uri [<DefaultValue>] val mutable public Title: string type Pages() = let pages = Array.zeroCreate<Page> 10 let mutable i = 0 member _.CurrentPage with get () = pages[i] and set (value) = // Move all the page objects down to accommodate the new one. if i > pages.GetUpperBound 0 then for ndx = 1 to pages.GetUpperBound 0 do pages[ndx - 1] <- pages[ndx] pages[i] <- value if i < pages.GetUpperBound 0 then i <- i + 1 member _.PreviousPage = if i = 0 then if box pages[0] = null then Unchecked.defaultof<Page> else pages[0] else i <- i - 1 pages[i + 1] let pages = Pages() if String.IsNullOrEmpty pages.CurrentPage.Title |> not then let title = pages.CurrentPage.Title printfn $"Current title: '{title}'" // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object. // at <StartupCode$fs>.main()Module Example Public Sub Main() Dim pages As New Pages() Dim title As String = pages.CurrentPage.Title End Sub End Module Public Class Pages Dim page(9) As Page Dim ctr As Integer = 0 Public Property CurrentPage As Page Get Return page(ctr) End Get Set ' Move all the page objects down to accommodate the new one. If ctr > page.GetUpperBound(0) Then For ndx As Integer = 1 To page.GetUpperBound(0) page(ndx - 1) = page(ndx) Next End If page(ctr) = value If ctr < page.GetUpperBound(0) Then ctr += 1 End Set End Property Public ReadOnly Property PreviousPage As Page Get If ctr = 0 Then If page(0) Is Nothing Then Return Nothing Else Return page(0) End If Else ctr -= 1 Return page(ctr + 1) End If End Get End Property End Class Public Class Page Public URL As Uri Public Title As String End Class ' The example displays the following output: ' Unhandled Exception: ' System.NullReferenceException: Object reference not set to an instance of an object. ' at Example.Main()Die Ausnahme wird ausgelöst, da
pages.CurrentPagezurückgegebennullwird, wenn keine Seiteninformationen im Cache gespeichert sind. Diese Ausnahme kann korrigiert werden, indem der Wert derCurrentPageEigenschaft vor dem Abrufen der Eigenschaft desTitleaktuellenPageObjekts getestet wird, wie im folgenden Beispiel gezeigt:var pages = new Pages(); Page current = pages.CurrentPage; if (current != null) { string title = current.Title; Console.WriteLine($"Current title: '{title}'"); } else { Console.WriteLine("There is no page information in the cache."); } // The example displays the following output: // There is no page information in the cache.let pages = Pages() let current = pages.CurrentPage if box current <> null then let title = current.Title printfn $"Current title: '{title}'" else printfn "There is no page information in the cache." // The example displays the following output: // There is no page information in the cache.Module Example Public Sub Main() Dim pages As New Pages() Dim current As Page = pages.CurrentPage If current IsNot Nothing Then Dim title As String = current.Title Console.WriteLine("Current title: '{0}'", title) Else Console.WriteLine("There is no page information in the cache.") End If End Sub End Module ' The example displays the following output: ' There is no page information in the cache.Sie aufzählen die Elemente eines Arrays, das Referenztypen enthält, und der Versuch, eines der Elemente zu verarbeiten, löst eine Ausnahme aus NullReferenceException .
Im folgenden Beispiel wird ein Zeichenfolgenarray definiert. Eine
forAnweisung listet die Elemente im Array auf und ruft die Methode der einzelnen Zeichenfolgen Trim auf, bevor die Zeichenfolge angezeigt wird.string[] values = [ "one", null, "two" ]; for (int ctr = 0; ctr <= values.GetUpperBound(0); ctr++) Console.Write("{0}{1}", values[ctr].Trim(), ctr == values.GetUpperBound(0) ? "" : ", "); Console.WriteLine(); // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object.open System let values = [| "one"; null; "two" |] for i = 0 to values.GetUpperBound 0 do printfn $"""{values[i].Trim()}{if i = values.GetUpperBound 0 then "" else ", "}""" printfn "" // The example displays the following output: // Unhandled Exception: // System.NullReferenceException: Object reference not set to an instance of an object. // at <StartupCode$fs>.main()Module Example Public Sub Main() Dim values() As String = { "one", Nothing, "two" } For ctr As Integer = 0 To values.GetUpperBound(0) Console.Write("{0}{1}", values(ctr).Trim(), If(ctr = values.GetUpperBound(0), "", ", ")) Next Console.WriteLine() End Sub End Module ' The example displays the following output: ' Unhandled Exception: System.NullReferenceException: ' Object reference not set to an instance of an object. ' at Example.Main()Diese Ausnahme tritt auf, wenn Sie davon ausgehen, dass jedes Element des Arrays einen Wert ungleich NULL enthalten muss, und der Wert des Arrayelements tatsächlich ist
null. Die Ausnahme kann beseitigt werden, indem getestet wird, ob das Element vor dem Ausführen eines Vorgangs für dieses Element ausgeführt wirdnull, wie im folgenden Beispiel gezeigt.string[] values = [ "one", null, "two" ]; for (int ctr = 0; ctr <= values.GetUpperBound(0); ctr++) Console.Write("{0}{1}", values[ctr] != null ? values[ctr].Trim() : "", ctr == values.GetUpperBound(0) ? "" : ", "); Console.WriteLine(); // The example displays the following output: // one, , twoopen System let values = [| "one"; null; "two" |] for i = 0 to values.GetUpperBound 0 do printf $"""{if values[i] <> null then values[i].Trim() else ""}{if i = values.GetUpperBound 0 then "" else ", "}""" Console.WriteLine() // The example displays the following output: // one, , twoModule Example Public Sub Main() Dim values() As String = { "one", Nothing, "two" } For ctr As Integer = 0 To values.GetUpperBound(0) Console.Write("{0}{1}", If(values(ctr) IsNot Nothing, values(ctr).Trim(), ""), If(ctr = values.GetUpperBound(0), "", ", ")) Next Console.WriteLine() End Sub End Module ' The example displays the following output: ' one, , twoEine Methode, wenn sie auf ein Element eines seiner Argumente zugreift, aber dieses Argument lautet
null. DiePopulateNamesMethode im folgenden Beispiel löst die Ausnahme in der Zeilenames.Add(arrName);aus.using System.Collections.Generic; public class NRE2Example { public static void Main() { List<string> names = GetData(); PopulateNames(names); } private static void PopulateNames(List<string> names) { string[] arrNames = [ "Dakota", "Samuel", "Nikita", "Koani", "Saya", "Yiska", "Yumaevsky" ]; foreach (string arrName in arrNames) names.Add(arrName); } private static List<string> GetData() { return null; } } // The example displays output like the following: // Unhandled Exception: System.NullReferenceException: Object reference // not set to an instance of an object. // at NRE2Example.PopulateNames(List`1 names) // at NRE2Example.Main()let populateNames (names: ResizeArray<string>) = let arrNames = [ "Dakota"; "Samuel"; "Nikita" "Koani"; "Saya"; "Yiska"; "Yumaevsky" ] for arrName in arrNames do names.Add arrName let getData () : ResizeArray<string> = null let names = getData () populateNames names // The example displays output like the following: // Unhandled Exception: System.NullReferenceException: Object reference // not set to an instance of an object. // at Example.PopulateNames(List`1 names) // at <StartupCode$fs>.main()Imports System.Collections.Generic Module Example Public Sub Main() Dim names As List(Of String) = GetData() PopulateNames(names) End Sub Private Sub PopulateNames(names As List(Of String)) Dim arrNames() As String = { "Dakota", "Samuel", "Nikita", "Koani", "Saya", "Yiska", "Yumaevsky" } For Each arrName In arrNames names.Add(arrName) Next End Sub Private Function GetData() As List(Of String) Return Nothing End Function End Module ' The example displays output like the following: ' Unhandled Exception: System.NullReferenceException: Object reference ' not set to an instance of an object. ' at Example.PopulateNames(List`1 names) ' at Example.Main()Um dieses Problem zu beheben, stellen Sie sicher, dass das an die Methode übergebene Argument nicht
nullist, oder behandeln Sie die ausgelöste Ausnahme in einemtry…catch…finallyBlock. Weitere Informationen finden Sie unter Ausnahmen.Eine Liste wird erstellt, ohne den Typ zu kennen, und die Liste wurde nicht initialisiert. Die
GetListMethode im folgenden Beispiel löst die Ausnahme in der ZeileemptyList.Add(value)aus.using System; using System.Collections.Generic; using System.Collections; using System.Runtime.Serialization; public class NullReferenceExample { public static void Main() { var listType = GetListType(); _ = GetList(listType); } private static Type GetListType() { return typeof(List<int>); } private static IList GetList(Type type) { var emptyList = (IList)FormatterServices.GetUninitializedObject(type); // Does not call list constructor var value = 1; emptyList.Add(value); return emptyList; } } // The example displays output like the following: // Unhandled Exception: System.NullReferenceException: 'Object reference // not set to an instance of an object.' // at System.Collections.Generic.List`1.System.Collections.IList.Add(Object item) // at NullReferenceExample.GetList(Type type): line 24Um dieses Problem zu beheben, stellen Sie sicher, dass die Liste initialisiert ist (eine Möglichkeit hierfür ist das Aufrufen
Activator.CreateInstanceanstelle vonFormatterServices.GetUninitializedObject), oder behandeln Sie die ausgelöste Ausnahme in einemtry…catch…finallyBlock. Weitere Informationen finden Sie unter Ausnahmen.
Die folgenden Microsoft MSIL-Anweisungen (Intermediate Language) lösen NullReferenceException aus: callvirt, cpblk, cpobj, initblk, ldelem.<type>, ldelema, ldfld, ldflda, ldind.<type>, ldlen, stelem.<type>, stfld, stind.<type>, throw und unbox.
NullReferenceException verwendet das HRESULT COR_E_NULLREFERENCE, das den Wert 0x80004003 hat.
Eine Liste der anfänglichen Eigenschaftswerte für eine Instanz von NullReferenceException, finden Sie unter den NullReferenceException Konstruktoren.
Behandeln von NullReferenceException-Ausnahmen
Normalerweise ist es besser, eine NullReferenceException zu vermeiden, als sie nach dem Auftreten zu behandeln. Die Behandlung einer Ausnahme kann dazu führen, dass Ihr Code schwieriger verwaltet und verstanden wird, und manchmal auch andere Fehler auftreten. Eine NullReferenceException ist häufig ein nicht wiederherstellbarer Fehler. In diesen Fällen ist das Beenden der Ausnahme die beste Alternative.
Es gibt jedoch viele Situationen, in denen die Behandlung des Fehlers hilfreich sein kann:
Ihre App kann Objekte ignorieren, die null sind. Wenn Ihre App beispielsweise Datensätze in einer Datenbank abruft und verarbeitet, können Sie möglicherweise einige ungültige Datensätze ignorieren, die zu NULL-Objekten führen. Das Aufzeichnen der fehlerhaften Daten in einer Protokolldatei oder in der Anwendungs-UI ist möglicherweise alles, was Sie tun müssen.
Sie können die Ausnahme wiederherstellen. Ein Aufruf eines Webdiensts, der einen Verweistyp zurückgibt, kann z. B. NULL zurückgeben, wenn die Verbindung verloren geht oder die Verbindung zu einem Zeitüberschreitungsausfall kommt. Sie können versuchen, die Verbindung wiederherzustellen und den Anruf erneut auszuführen.
Sie können den Zustand Ihrer App in einen gültigen Zustand wiederherstellen. So können Sie beispielsweise eine mehrstufige Aufgabe ausführen, für die Sie Informationen in einem Datenspeicher speichern müssen, bevor Sie eine Methode aufrufen, die eine NullReferenceException auslöst. Wenn das nicht initialisierte Objekt den Datensatz beschädigt, können Sie die vorherigen Daten entfernen, bevor Sie die App schließen.
Sie möchten die Ausnahme melden. Wenn der Fehler z. B. durch einen Fehler des Benutzers Ihrer App verursacht wurde, können Sie eine Meldung generieren, die ihnen dabei hilft, die richtigen Informationen zu liefern. Sie können auch Informationen zum Fehler protokollieren, um das Problem zu beheben. Einige Frameworks, z. B. ASP.NET, verfügen über einen allgemeinen Ausnahmehandler, der alle Fehler erfasst, bei denen die App nie abstürzt. In diesem Fall ist die Protokollierung der Ausnahme möglicherweise die einzige Möglichkeit, wie Sie wissen können, dass sie auftritt.
Konstruktoren
| Name | Beschreibung |
|---|---|
| NullReferenceException() |
Initialisiert eine neue Instanz der NullReferenceException Klasse, indem die Message Eigenschaft der neuen Instanz auf eine vom System bereitgestellte Meldung festgelegt wird, die den Fehler beschreibt, z. B. "Der Wert 'null' wurde gefunden, wo eine Instanz eines Objekts erforderlich war." Diese Meldung berücksichtigt die aktuelle Systemkultur. |
| NullReferenceException(SerializationInfo, StreamingContext) |
Veraltet.
Initialisiert eine neue Instanz der NullReferenceException Klasse mit serialisierten Daten. |
| NullReferenceException(String, Exception) |
Initialisiert eine neue Instanz der NullReferenceException Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die die Ursache dieser Ausnahme ist. |
| NullReferenceException(String) |
Initialisiert eine neue Instanz der NullReferenceException Klasse mit einer angegebenen Fehlermeldung. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Data |
Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen zur Ausnahme bereitstellen. (Geerbt von Exception) |
| HelpLink |
Dient zum Abrufen oder Festlegen eines Links zur Hilfedatei, die dieser Ausnahme zugeordnet ist. (Geerbt von Exception) |
| HResult |
Dient zum Abrufen oder Festlegen von HRESULT, einem codierten numerischen Wert, der einer bestimmten Ausnahme zugewiesen ist. (Geerbt von Exception) |
| InnerException |
Ruft die Exception Instanz ab, die die aktuelle Ausnahme verursacht hat. (Geerbt von Exception) |
| Message |
Ruft eine Nachricht ab, die die aktuelle Ausnahme beschreibt. (Geerbt von Exception) |
| Source |
Dient zum Abrufen oder Festlegen des Namens der Anwendung oder des Objekts, das den Fehler verursacht. (Geerbt von Exception) |
| StackTrace |
Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames im Aufrufstapel ab. (Geerbt von Exception) |
| TargetSite |
Ruft die Methode ab, die die aktuelle Ausnahme auslöst. (Geerbt von Exception) |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetBaseException() |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Exception Ursache einer oder mehrerer nachfolgenden Ausnahmen zurückgegeben. (Geerbt von Exception) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Veraltet.
Wenn sie in einer abgeleiteten Klasse überschrieben wird, werden die SerializationInfo Informationen zur Ausnahme festgelegt. (Geerbt von Exception) |
| GetType() |
Ruft den Laufzeittyp der aktuellen Instanz ab. (Geerbt von Exception) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Erstellt und gibt eine Zeichenfolgendarstellung der aktuellen Ausnahme zurück. (Geerbt von Exception) |
Ereignisse
| Name | Beschreibung |
|---|---|
| SerializeObjectState |
Veraltet.
Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmestatusobjekt zu erstellen, das serialisierte Daten zu der Ausnahme enthält. (Geerbt von Exception) |