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

InvalidCastException-Klasse

 

Veröffentlicht: Oktober 2016

Die Ausnahme, die bei einer ungültigen Umwandlung oder expliziten Konvertierung ausgelöst wird.

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

System.Object
  System.Exception
    System.SystemException
      System.InvalidCastException

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

NameBeschreibung
System_CAPS_pubmethodInvalidCastException()

Initialisiert eine neue Instanz der InvalidCastException-Klasse.

System_CAPS_protmethodInvalidCastException(SerializationInfo, StreamingContext)

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

System_CAPS_pubmethodInvalidCastException(String)

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

System_CAPS_pubmethodInvalidCastException(String, Exception)

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

System_CAPS_pubmethodInvalidCastException(String, Int32)

Initialisiert eine neue Instanz der InvalidCastException -Klasse mit einer angegebenen Meldung und den Fehlercode.

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, 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“.)

.NET Framework unterstützt die automatische Konvertierung von abgeleiteten Typen in ihre Basistypen und wieder in den abgeleiteten Typ sowie Typen, die Schnittstellen, um Objekte der Benutzeroberfläche und wieder zu präsentieren. Darüber hinaus steht eine Vielzahl von Mechanismen, die benutzerdefinierte Konvertierungen unterstützen. Weitere Informationen finden Sie unter Typkonvertierung in .NET Framework.

Ein InvalidCastException Ausnahme wird ausgelöst, wenn die Konvertierung einer Instanz eines Typs in einen anderen Typ nicht unterstützt wird. Versucht wird, z. B. konvertieren eine Char -Wert in einen DateTime Wert löst eine InvalidCastException Ausnahme. Es unterscheidet sich von einer OverflowException Ausnahme, die ausgelöst wird, wenn eine Konvertierung von einem Typ in einen anderen wird unterstützt, aber der Wert des Quelltyps außerhalb des Bereichs des Zieltyps ist. Ein InvalidCastException Ausnahme Entwickler Fehler ist aufgetreten, und nicht behandelt werden einer try/catch Blockieren; stattdessen sollte die Ursache der Ausnahme behoben werden.

Informationen über Konvertierungen, die vom System unterstützt werden, finden Sie unter der Convert Klasse. Fehler bei der Zieltyp speichern kann Quelltyp Werte zu, aber ist nicht groß genug zum Speichern eines Werts bestimmte Quelle finden Sie unter der OverflowException Ausnahme.

System_CAPS_noteHinweis

In vielen Fällen erkennt der Sprachcompiler, dass keine Konvertierung zwischen den Quelltyp und dem Zieltyp vorhanden ist, und einen Compilerfehler gibt.

Einige der Bedingungen, unter denen eine Konvertierung löst, eine InvalidCastException Ausnahme werden in den folgenden Abschnitten erläutert:

Primitive Typen und IConvertible
Die Convert.ChangeType-Methode
Einschränkende Konvertierungen und IConvertible-Implementierungen
Typumwandlung
Konvertierung von ein
Zeichenfolgenkonvertierung
Visual Basic 6.0-migration

Für eine explizite Konvertierung erfolgreich ausgeführt werden kann, muss der Quellwert null, oder der Objekttyp, auf das Quellargument verweist, muss in den Zieltyp durch implizite verweiskonvertierung konvertierbar sein.

Die folgenden intermediate Language (IL)-Anweisungen Auslösen einer InvalidCastException Ausnahme:

  • castclass

  • refanyval

  • unbox

InvalidCastException verwendet HRESULT COR_E_INVALIDCAST mit den Wert 0 x 80004002.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von InvalidCastException, finden Sie unter der InvalidCastException Konstruktoren.

Direkt oder indirekt rufen Sie eines primitiven Typs IConvertible -Implementierung, die eine bestimmte Konvertierung nicht unterstützt. Beispielsweise konvertieren möchten eine Boolean -Wert in eine Char oder ein DateTime Wert ein Int32 löst ein InvalidCastException Ausnahme. Im folgenden Beispiel wird sowohl die Boolean.IConvertible.ToChar und Convert.ToChar(Boolean) Methoden zum Konvertieren einer Boolean -Wert in eine Char. In beiden Fällen löst der Methodenaufruf eine InvalidCastException Ausnahme.

using System;

public class Example
{
   public static void Main()
   {
      bool flag = true;
      try {
         IConvertible conv = flag;
         Char ch = conv.ToChar(null);
         Console.WriteLine("Conversion succeeded.");
      }   
      catch (InvalidCastException) {   
         Console.WriteLine("Cannot convert a Boolean to a Char.");
      }

      try {
         Char ch = Convert.ToChar(flag);
         Console.WriteLine("Conversion succeeded.");
      }   
      catch (InvalidCastException) {   
         Console.WriteLine("Cannot convert a Boolean to a Char.");
      }
   }
}
// The example displays the following output:
//       Cannot convert a Boolean to a Char.
//       Cannot convert a Boolean to a Char.

Da die Konvertierung nicht unterstützt wird, kann nicht umgangen.

Sie aufgerufen haben die Convert.ChangeType Methode, um ein Objekt von einem Typ in einen anderen, aber einen oder beide Typen konvertieren implementieren Sie nicht die IConvertible Schnittstelle.

In den meisten Fällen da die Konvertierung nicht unterstützt wird, ist es keine problemumgehung. In einigen Fällen wird eine mögliche Abhilfe Eigenschaftswerte aus dem Quelltyp ähnliche Eigenschaften manuell zuweisen einer der Zieltyp.

Einschränkende definieren die expliziten Konvertierungen, die von einem Typ unterstützt. Ein Umwandlungsoperator in c# oder die CType Methode zum Konvertieren in Visual Basic (Wenn Option Strict ist) ist erforderlich, um die Konvertierung auszuführen.

Jedoch, wenn der Quelltyp weder den Zieltyp eine explizite oder einschränkende Konvertierung zwischen den beiden Typen definiert und die IConvertible Implementierung eine oder beide Typen eine Konvertierung des Quelltyps in den Zieltyp unterstützt keine InvalidCastException Ausnahme ausgelöst.

In den meisten Fällen da die Konvertierung nicht unterstützt wird, ist es keine problemumgehung.

Sie können die Downcasting, d. h., eine Instanz eines Basistyps in einen der abgeleiteten Typen konvertiert werden. Im folgenden Beispiel konvertieren möchten ein Person -Objekt an eine PersonWithID -Objekt ein Fehler auftritt.

using System;

public class Person
{
   String _name;

   public String Name 
   { 
      get { return _name; }
      set { _name = value; }
   }
}

public class PersonWithId : Person
{
   String _id;

   public string Id
   {
      get { return _id; }
      set { _id = value; }
   }
}

public class Example
{
   public static void Main()
   {
      Person p = new Person();
      p.Name = "John";
      try {
         PersonWithId pid = (PersonWithId) p;
         Console.WriteLine("Conversion succeeded.");
      }   
      catch (InvalidCastException) {
         Console.WriteLine("Conversion failed.");
      } 

      PersonWithId pid1 = new PersonWithId();
      pid1.Name = "John";
      pid1.Id = "246";
      Person p1 = pid1;
      try {   
         PersonWithId pid1a = (PersonWithId) p1;
         Console.WriteLine("Conversion succeeded.");
      }   
      catch (InvalidCastException) {
         Console.WriteLine("Conversion failed.");
      } 

      Person p2 = null;
      try {   
         PersonWithId pid2 = (PersonWithId) p2;
         Console.WriteLine("Conversion succeeded.");
      }   
      catch (InvalidCastException) {
         Console.WriteLine("Conversion failed.");
      } 
   }
}
// The example displays the following output:
//       Conversion failed.
//       Conversion succeeded.
//       Conversion succeeded.

Wie im Beispiel dargestellt, die Umwandlung nur erfolgreich, wenn die Person wurde erstellt, indem eine Verallgemeinerung von einer PersonWithId -Objekt ein Person -Objekt, oder, wenn die Person Objekt ist null.

Sie versuchen, ein auf einen Typ zu konvertieren, die diese Schnittstelle implementiert, aber der Zieltyp ist nicht der gleiche Typ oder eine Basisklasse des Typs von der das Objekt ursprünglich abgeleitet wurde. Im folgenden Beispiel wird eine InvalidCastException -Ausnahme aus, wenn versucht wird, konvertiert ein IFormatProvider -Objekt ein DateTimeFormatInfo Objekt. Die Konvertierung schlägt fehl, da auch die DateTimeFormatInfo -Klasse implementiert die IFormatProvider -Schnittstelle, die DateTimeFormatInfo Objekt gehört nicht zum der CultureInfo -Klasse aus dem das Objekt abgeleitet wurde.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      var culture = CultureInfo.InvariantCulture;
      IFormatProvider provider = culture;

      DateTimeFormatInfo dt = (DateTimeFormatInfo) provider;
   }
}
// The example displays the following output:
//    Unhandled Exception: System.InvalidCastException: 
//       Unable to cast object of type //System.Globalization.CultureInfo// to 
//           type //System.Globalization.DateTimeFormatInfo//.
//       at Example.Main()

Wie die Ausnahme Meldung weist darauf hin, die Konvertierung ist nur erfolgreich, wenn das Objekt wieder in eine Instanz des ursprünglichen Typs konvertiert wird, in diesem Fall eine CultureInfo. Die Konvertierung wird auch dann erfolgreich, wenn das Objekt mit einer Instanz von einem Basistyp von den ursprünglichen Typ konvertiert wird.

Sie versuchen, einen Wert oder ein Objekt in seine Zeichenfolgendarstellung zu konvertieren, mit einem Umwandlungsoperator in c#. Im folgenden Beispiel sowohl der Versuch, umzuwandeln ein Char Wert in eine Zeichenfolge und der Versuch, eine ganze Zahl und eine Zeichenfolge Throw umzuwandeln ein InvalidCastException Ausnahme.

using System;

public class Example
{
   public static void Main()
   {
      object value = 12;
      // Cast throws an InvalidCastException exception.
      string s = (string) value;
   }
}
System_CAPS_noteHinweis

Mithilfe von Visual Basic CStr erfolgreich Operator, um einen Wert eines primitiven Typs in eine Zeichenfolge konvertieren. Der Vorgang löst eine InvalidCastException Ausnahme.

Rufen Sie erfolgreich eine Instanz eines beliebigen Typs in eine Zeichenfolgendarstellung konvertiert, dessen ToString -Methode, wie im folgenden Beispiel wird. Die ToString Methode immer vorhanden ist, da die ToString Methode definiert ist die Object -Klasse und daher wird geerbt oder durch alle verwalteten Typen außer Kraft gesetzt.

using System;

public class Example
{
   public static void Main()
   {
      object value = 12;
      string s = value.ToString();
      Console.WriteLine(s);
   }
}
// The example displays the following output:
//      12

Aktualisieren eine Visual Basic 6.0-Anwendung mit einem Aufruf eines benutzerdefinierten Ereignisses in einem Benutzersteuerelement auf Visual Basic .NET und eine InvalidCastException -Ausnahme mit der Meldung ausgelöst wird, "angegebene Umwandlung ist ungültig." Um diese Ausnahme zu vermeiden, ändern Sie die Codezeile in Ihr Formular (z. B. Form1)

Call UserControl11_MyCustomEvent(UserControl11, New UserControl1.MyCustomEventEventArgs(5))

und Ersetzen Sie ihn durch die folgende Codezeile:

Call UserControl11_MyCustomEvent(UserControl11(0), New UserControl1.MyCustomEventEventArgs(5))

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: