Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

FormatException-Klasse

 

Veröffentlicht: Oktober 2016

Die Ausnahme, die ausgelöst wird, wenn das Format eines Arguments ungültig ist, oder wenn eine kombinierte Formatierungszeichenfolge nicht wohlgeformt ist.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.FormatException
        System.IO.FileFormatException
        System.Net.CookieException
        System.Reflection.CustomAttributeFormatException
        System.UriFormatException

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class FormatException : SystemException

NameBeschreibung
System_CAPS_pubmethodFormatException()

Initialisiert eine neue Instanz der FormatException-Klasse.

System_CAPS_protmethodFormatException(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der FormatException-Klasse mit serialisierten Daten.

System_CAPS_pubmethodFormatException(String)

Initialisiert eine neue Instanz der FormatException-Klasse mit einer angegebenen Fehlermeldung.

System_CAPS_pubmethodFormatException(String, Exception)

Initialisiert eine neue Instanz der FormatException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

NameBeschreibung
System_CAPS_pubpropertyData

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen über die Ausnahme bereitstellen.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.(Geerbt von „Exception“.)

System_CAPS_pubpropertyInnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.(Geerbt von „Exception“.)

System_CAPS_pubpropertyMessage

Ruft eine Meldung ab, die die aktuelle Ausnahme beschreibt.(Geerbt von „Exception“.)

System_CAPS_pubpropertySource

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyStackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.(Geerbt von „Exception“.)

System_CAPS_pubpropertyTargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird.(Geerbt von „Object“.)

System_CAPS_pubmethodGetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die ursprüngliche Ursache für eine oder mehrere nachfolgende Ausnahmen ist.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.(Geerbt von „Exception“.)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_proteventSerializeObjectState

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt zu erstellen, das serialisierte Daten für die Ausnahme enthält.(Geerbt von „Exception“.)

Ein FormatException Ausnahme können aus einem der folgenden Gründe:

  • In einem Aufruf einer Methode, die eine Zeichenfolge in einen anderen Datentyp konvertiert, wird die Zeichenfolge dem erforderlichen Muster entsprechen. Dies tritt normalerweise beim Aufruf einiger Methoden auf die Convert Klasse und die Parse und ParseExact Methoden einiger Typen.

    In den meisten Fällen, besonders wenn die Zeichenfolge, die Sie konvertieren von einem Benutzer eingegeben oder aus einer Datei lesen sollten Sie verwenden eine try/catch Blockieren und Behandeln der FormatException -Ausnahme aus, wenn die Konvertierung erfolgreich ist. Sie können auch den Aufruf der Methode zum Konvertieren von ersetzen, mit einem Aufruf von einer TryParse oder TryParseExact -Methode, sofern ein solcher vorhanden ist. Allerdings eine FormatException Ausnahme, die ausgelöst wird, wenn Sie versuchen, eine vordefinierte oder hartcodierte Zeichenfolge gibt ein Programmfehler an. In diesem Fall sollten Sie den Fehler beheben anstatt die Ausnahme zu behandeln.

    Die Konvertierung einer Zeichenfolge in der folgenden Typen in den System Namespace lösen kann eine FormatException Ausnahme:

    • Boolean. Die Boolean.Parse(String) und Convert.ToBoolean(String) Methoden muss die Zeichenfolge konvertiert werden, um "True", "true", "False" oder "false". Bei anderen Werten wird eine FormatException Ausnahme.

    • DateTime und DateTimeOffset. Alle Daten für Datum und Uhrzeit interpretiert die Formatierungskonventionen einer bestimmten Kultur abhängig: die aktuelle Threadkultur (oder in einigen Fällen die aktuelle Kultur der Anwendung Domäne), die invariante Kultur oder einer angegebenen Kultur. Beim Aufrufen der DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) und DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles) Methoden, Datums-und Uhrzeitdaten muss auch entsprechen genau mit einem Muster, die durch eine oder mehrere angegebene Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen die als Argument im Aufruf Methode bereitgestellt werden. Wenn sie eine erwartete kulturspezifische Muster entsprechen keine FormatException Ausnahme ausgelöst. Dies bedeutet, dass die Datums- und Zeitdaten in einem kulturabhängigen Format gespeichert werden, auf einem System nicht erfolgreich auf einem anderen System analysiert werden können.

      Weitere Informationen zum Analysieren von Datums- und Uhrzeitangaben finden Sie unter Analysieren von Zeichenfolgen für Datum und Uhrzeit in .NET Framework und in der Dokumentation für die Methode, die die Ausnahme ausgelöst hat.

    • GUIDs. Die Zeichenfolgendarstellung einer GUID muss aus 32 Hexadezimalziffern (0-F) bestehen und muss in einem der fünf Formate Ausgabe durch die Guid.ToString Methode. Weitere Informationen finden Sie unter der Methode Guid.Parse.

    • Numerische Typen, z. B. alle signierten Ganzzahlen, ganze Zahlen ohne Vorzeichen und Gleitkommatypen. Die Zeichenfolge, die analysiert werden, muss der westlichen Ziffern 0-9 bestehen. Ein positiven oder negativen Vorzeichen, Dezimaltrennzeichen, Gruppentrennzeichen und Währungssymbol können ebenfalls verwendet werden. Bei dem Versuch, eine Zeichenfolge zu analysieren, die andere enthält Zeichen immer löst eine FormatException Ausnahme.

      Alle numerische Zeichenfolgen basierend auf die Formatierungskonventionen einer bestimmten Kultur interpretiert werden: die aktuelle Threadkultur (oder in einigen Fällen die aktuelle Kultur der Anwendung Domäne), die invariante Kultur oder einer angegebenen Kultur. Daher kann eine numerische Zeichenfolge, die analysiert wird, mit den Konventionen der Kultur ein fehlschlagen, wenn mit den Konventionen einer anderen.

      Weitere Informationen zum Analysieren von numerischer Zeichenfolgen finden Sie unter Analysieren von numerischen Zeichenfolgen in .NET Framework und in der Dokumentation für die jeweilige Methode, die die Ausnahme ausgelöst hat.

    • Zeitintervalle. Die Zeichenfolge, die analysiert werden muss, in festen kulturunabhängigen Format oder in einem kulturabhängigen Format definiert, durch die aktuelle Threadkultur (oder in einigen Fällen die aktuelle Kultur der Anwendung Domäne), die invariante Kultur oder einer angegebenen Kultur. Wenn die Zeichenfolge ist nicht in ein geeignetes Format, oder, bei die Mindestanforderungen, die Tage, Stunden, Minuten Komponenten des Zeitintervalls nicht vorhanden sind, löst die Analysemethode eine FormatException Ausnahme. Weitere Informationen finden Sie in der Dokumentation für die TimeSpan Analysemethode, die die Ausnahme ausgelöst hat.

  • Ein Typ implementiert die IFormattable -Schnittstelle unterstützt die Verwendung von Formatzeichenfolgen, die definieren, wie ein Objekt in seine Zeichenfolgendarstellung konvertiert wird und eine ungültige Formatzeichenfolge wird verwendet. Dies ist die am häufigsten in einem Formatierungsvorgang. Im folgenden Beispiel wird die Standardformatzeichenfolge "Q" zum Formatieren einer Zahl in einer zusammengesetzten Formatzeichenfolge verwendet. "Q" ist jedoch kein gültiger Standardformatzeichenfolge.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          decimal price = 169.32m;
          Console.WriteLine("The cost is {0:Q2}.", price);
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.FormatException: Format specifier was invalid.
    //       at System.Number.FormatDecimal(Decimal value, String format, NumberFormatInfo info)
    //       at System.Decimal.ToString(String format, IFormatProvider provider)
    //       at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
    //       at System.IO.TextWriter.WriteLine(String format, Object arg0)
    //       at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0)
    //       at Example.Main()
    

    Diese Ausnahme ergibt einen Fehler im Code. Um den Fehler zu beheben, entfernen Sie die Formatzeichenfolge oder Ersetzen Sie eines. Im folgenden Beispiel wird korrigiert den Fehler, indem die ungültige Formatzeichenfolge mit der Formatzeichenfolge "C" (Währung) ersetzt.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          decimal price = 169.32m;
          Console.WriteLine("The cost is {0:C2}.", price);
       }
    }
    // The example displays the following output:
    //    The cost is $169.32.
    

    Ein FormatException kann auch ausgelöst durch das Analysieren von Methoden, wie z. B. DateTime.ParseExact und Guid.ParseExact, erfordern die Zeichenfolge, die analysiert werden, um genau die durch eine Zeichenfolge angegebenen Muster entsprechen. Im folgenden Beispiel wird die Zeichenfolgendarstellung einer GUID erwartet die durch die Standardformatzeichenfolge "G" angegebenen Muster entsprechen. Allerdings die Guid -Struktur-Implementierung von IFormattable die Formatzeichenfolge "G" wird nicht unterstützt.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          string guidString = "ba748d5c-ae5f-4cca-84e5-1ac5291c38cb";
          Console.WriteLine(Guid.ParseExact(guidString, "G"));
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.FormatException: 
    //       Format String can be only "D", "d", "N", "n", "P", "p", "B", "b", "X" or "x".
    //       at System.Guid.ParseExact(String input, String format)
    //       at Example.Main()
    

    Diese Ausnahme führt auch über einen Fehler im Code. Um es zu korrigieren, rufen Sie eine Analysemethode, die eine genaue Format, z. B. erfordert DateTime.Parse oder Guid.Parse, oder eine gültige Zeichenfolge ersetzen. Im folgenden Beispiel wird den Fehler korrigiert, durch Aufrufen der Guid.Parse Methode.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          string guidString = "ba748d5c-ae5f-4cca-84e5-1ac5291c38cb";
          Console.WriteLine(Guid.Parse(guidString));
       }
    }
    // The example displays the following output:
    //    ba748d5c-ae5f-4cca-84e5-1ac5291c38cb
    
  • Eine oder mehrere der Indizes der die Formatelemente in einer zusammengesetzte Formatzeichenfolge ist größer als die Indizes der Elemente im Objektarray Liste oder Parameter. Im folgenden Beispiel ist der größte Index eines Formatelements in der Formatzeichenfolge 3. Da die Indizes der Elemente in der Objektliste nullbasiert sind, müssten diese Formatzeichenfolge an vier Elemente enthält. Stattdessen hat es nur drei dat, temp, und scale, sodass der Code führt eine FormatException -Ausnahme zur Laufzeit:.

    using System;
    
    public class Example
    {
       public enum TemperatureScale 
       { Celsius, Fahrenheit, Kelvin }
    
       public static void Main()
       {
          String info = GetCurrentTemperature();
          Console.WriteLine(info);
       }
    
       private static String GetCurrentTemperature()
       {
          DateTime dat = DateTime.Now;
          Decimal temp = 20.6m;
          TemperatureScale scale = TemperatureScale.Celsius;
          String result;
    
          result = String.Format("At {0:t} on {1:D}, the temperature is {2:F1} {3:G}",
                                 dat, temp, scale);    
          return result;
       }
    }
    // The example displays output like the following:
    //    Unhandled Exception: System.FormatException: Format specifier was invalid.
    //       at System.Number.FormatDecimal(Decimal value, String format, NumberFormatInfo info)
    //       at System.Decimal.ToString(String format, IFormatProvider provider)
    //       at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
    //       at System.String.Format(IFormatProvider provider, String format, Object[] args)
    //       at Example.Main()
    

    In diesem Fall die FormatException Ausnahme ist das Ergebnis der Entwickler Fehler. Es sollten korrigiert, anstatt behandelt eine try/catch blockieren, indem Sie sicherstellen, dass jedes Element in der Liste auf den Index des Formatelements entspricht. Um dieses Beispiel zu korrigieren, ändern Sie den Index für die zweite Formatelement zum Verweisen auf die dat Variable und Verringerung der Index der einzelnen nachfolgenden Elemente von einem.

    using System;
    
    public class Example
    {
       public enum TemperatureScale 
       { Celsius, Fahrenheit, Kelvin }
    
       public static void Main()
       {
          String info = GetCurrentTemperature();
          Console.WriteLine(info);
       }
    
       private static String GetCurrentTemperature()
       {
          DateTime dat = DateTime.Now;
          Decimal temp = 20.6m;
          TemperatureScale scale = TemperatureScale.Celsius;
          String result;
    
          result = String.Format("At {0:t} on {0:D}, the temperature is {1:F1} {2:G}",
                                 dat, temp, scale);    
          return result;
       }
    }
    // The example displays output like the following:
    //    At 10:40 AM on Wednesday, June 04, 2014, the temperature is 20.6 Celsius
    
  • Die kombinierte Formatzeichenfolge ist nicht wohlgeformt. In diesem Fall die FormatException Ausnahme ist immer ein Ergebnis vom Entwickler Fehler. Es sollten korrigiert, anstatt behandelt eine try/catch Block.

    Beim Versuch, Literale geschweifte Klammern in einer Zeichenfolge enthalten, wie im folgenden Beispiel wird, löst die Ausnahme aus.

    result = String.Format("The text has {0} '{' characters and {1} '}' characters.",
                           nOpen, nClose);
    

    Das empfohlene Verfahren zum Einbeziehen von literaler geschweiften Klammern in einer zusammengesetzten Formatzeichenfolge ist in der Liste enthalten sind, und verwenden Formatelemente zum Einfügen in die Ergebniszeichenfolge. Beispielsweise können Sie die vorherigen zusammengesetzte Formatzeichenfolge ändern, wie hier gezeigt.

    result = String.Format("The text has {0} '{{' characters and {1} '}}' characters.",
                           nOpen, nClose);
    

    Die Ausnahme wird auch ausgelöst, wenn die Formatzeichenfolge einen Tippfehler enthält. Der folgende Aufruf von der String.Format -Methode lässt eine schließende geschweifte Klammer und öffnende geschweifte Klammer mit einer schließenden Klammer-Paaren.

    int n1 = 10;
    int n2 = 20;
    String result = String.Format("{0 + {1] = {2}", 
                                  n1, n2, n1 + n2);
    

    Um den Fehler zu beheben, stellen Sie sicher, dass öffnende und schließende geschweifte Klammern entsprechen.

    String result = String.Format("{0} + {1} = {2}", 
                                  n1, n2, n1 + n2);
    
  • Sie haben die Objektliste in einer kombinierten Formatierungsmethode als stark typisierte Parameterarray bereitgestellt und die FormatException Ausnahme gibt an, dass der Index der eine oder mehrere Formatelemente, die Anzahl der Argumente in der Liste überschreitet. Dies tritt auf, da es keine explizite Konvertierung zwischen Arraytypen gibt stattdessen der Compiler behandelt das Array als ein einziges Argument und nicht als ein Parameterarray. Beispielsweise folgender Aufruf von der Console.WriteLine(String, Object[]) -Methode löst eine FormatException Ausnahme zwar der höchste Index der Formatelemente 3 und das Parameterarray vom Typ ist Int32 verfügt über vier Elemente.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       public static void Main()
       {
          Random rnd = new Random();
          int[]  numbers = new int[4];
          int total = 0;
          for (int ctr = 0; ctr <= 2; ctr++) {
             int number = rnd.Next(1001);
             numbers[ctr] = number;
             total += number;
          }   
          numbers[3] = total;
          Console.WriteLine("{0} + {1} + {2} = {3}", numbers);   
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: 
    //    System.FormatException: 
    //       Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
    //       at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
    //       at System.IO.TextWriter.WriteLine(String format, Object arg0)
    //       at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0)
    //       at Example.Main()
    

    Anstatt diese Ausnahme wird verarbeitet, sollten die Ursache entfernt werden. Da weder Visual Basic oder c# ein Array von Ganzzahlen in ein Objektarray konvertieren kann, müssen Sie die Konvertierung selbst vor dem Aufrufen der Methode zur kombinierten Formatierung durchführen. Das folgende Beispiel stellt eine Implementierung bereit.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       public static void Main()
       {
          Random rnd = new Random();
          int[]  numbers = new int[4];
          int total = 0;
          for (int ctr = 0; ctr <= 2; ctr++) {
             int number = rnd.Next(1001);
             numbers[ctr] = number;
             total += number;
          }   
          numbers[3] = total;
          object[] values = new object[numbers.Length];
          numbers.CopyTo(values, 0);
          Console.WriteLine("{0} + {1} + {2} = {3}", values);   
       }
    }
    // The example displays output like the following:
    //        477 + 956 + 901 = 2334
    

FormatException verwendet HRESULT COR_E_FORMAT mit den Wert 0 x 80131537.

Die FormatException Klasse leitet sich von Exception und fügt keine speziellen Elemente. Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von FormatException, finden Sie unter der FormatException Konstruktoren.

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: