Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

InvalidCastException classe

 

Date de publication : novembre 2016

Exception levée pour un transtypage non valide ou une conversion explicite.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

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

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

NomDescription
System_CAPS_pubmethodInvalidCastException()

Initialise une nouvelle instance de la classe InvalidCastException.

System_CAPS_protmethodInvalidCastException(SerializationInfo, StreamingContext)

Initialise une nouvelle instance de la classe InvalidCastException avec des données sérialisées.

System_CAPS_pubmethodInvalidCastException(String)

Initialise une nouvelle instance de la classe InvalidCastException avec un message d'erreur spécifié.

System_CAPS_pubmethodInvalidCastException(String, Exception)

Initialise une nouvelle instance de la classe InvalidCastException avec un message d'erreur spécifié et une référence à l'exception interne ayant provoqué cette exception.

System_CAPS_pubmethodInvalidCastException(String, Int32)

Initialise une nouvelle instance de la InvalidCastException classe avec un code d’erreur et le message spécifié.

NomDescription
System_CAPS_pubpropertyData

Obtient une collection de paires clé/valeur qui fournissent des informations supplémentaires définies par l’utilisateur sur l’exception.(Hérité de Exception.)

System_CAPS_pubpropertyHelpLink

Obtient ou définit un lien vers le fichier d'aide associé à cette exception.(Hérité de Exception.)

System_CAPS_pubpropertyHResult

Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique.(Hérité de Exception.)

System_CAPS_pubpropertyInnerException

Obtient l'instance Exception qui a provoqué l'exception actuelle.(Hérité de Exception.)

System_CAPS_pubpropertyMessage

Obtient un message qui décrit l'exception actuelle.(Hérité de Exception.)

System_CAPS_pubpropertySource

Obtient ou définit le nom de l'application ou de l'objet qui est à l'origine de l'erreur.(Hérité de Exception.)

System_CAPS_pubpropertyStackTrace

Obtient une représentation sous forme de chaîne des objets immédiats sur la pile des appels. (Hérité de Exception.)

System_CAPS_pubpropertyTargetSite

Obtient la méthode qui lève l'exception actuelle.(Hérité de Exception.)

NomDescription
System_CAPS_pubmethodEquals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.(Hérité de Object.)

System_CAPS_protmethodFinalize()

Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)

System_CAPS_pubmethodGetBaseException()

En cas de substitution dans une classe dérivée, retourne la Exception qui est à l'origine d'une ou de plusieurs exceptions ultérieures.(Hérité de Exception.)

System_CAPS_pubmethodGetHashCode()

Fait office de fonction de hachage par défaut.(Hérité de Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

En cas de substitution dans une classe dérivée, définit SerializationInfo avec des informations sur l'exception.(Hérité de Exception.)

System_CAPS_pubmethodGetType()

Obtient le type au moment de l'exécution de l'instance actuelle.(Hérité de Exception.)

System_CAPS_protmethodMemberwiseClone()

Crée une copie superficielle du Object actuel.(Hérité de Object.)

System_CAPS_pubmethodToString()

Crée et retourne une chaîne représentant l'exception actuelle.(Hérité de Exception.)

NomDescription
System_CAPS_proteventSerializeObjectState

Se produit quand une exception est sérialisée pour créer un objet d'état d'exception qui contient des données sérialisées concernant l'exception.(Hérité de Exception.)

Le .NET Framework prend en charge la conversion automatique de types dérivés de leurs types de base et rétablir le type dérivé, ainsi que des types qui présentent des interfaces pour les objets de l’interface et la sauvegarde. Il inclut également une variété de mécanismes qui prennent en charge les conversions personnalisées. Pour plus d'informations, consultez Conversion de type dans le .NET Framework.

Un InvalidCastException exception est levée lorsque la conversion d’une instance d’un type en un autre type n’est pas pris en charge. Par exemple, essayez de convertir un Char valeur un DateTime valeur lève une InvalidCastException exception. Il diffère d’un OverflowException exception qui est levée lorsqu’une conversion d’un type à un autre est prise en charge, mais la valeur du type de source est en dehors de la plage du type cible. Un InvalidCastException exception est dû à une erreur de développement et ne doit pas être traitée dans un try/catch bloc, au lieu de cela, il convient d’éliminer la cause de l’exception.

Pour plus d’informations sur les conversions prises en charge par le système, consultez la Convert classe. Les erreurs qui se produisent lorsque le type de destination peut stocker des valeurs de type de source, mais n’est pas grand assez pour stocker une valeur source spécifique, consultez la OverflowException exception.

System_CAPS_noteRemarque

Dans de nombreux cas, votre compilateur de langage détecte qu’aucune conversion n’existe entre le type de source et du type cible et émet une erreur du compilateur.

Certaines des conditions dans lesquelles une tentative de conversion lève une InvalidCastException exception sont décrites dans les sections suivantes :

Les types primitifs et IConvertible
La méthode Convert.ChangeType
Les conversions restrictives et implémentations de IConvertible
Cast descendant
Conversion à partir d’un objet d’interface
Conversions de chaînes
Migration de Visual Basic 6.0

Pour une conversion de référence explicite réussisse, la valeur source doit être null, ou le type d’objet référencé par l’argument source doit être convertible au type de destination par une conversion de référence implicite.

Les instructions de langage intermédiaire (IL) suivantes lèvent une InvalidCastException exception :

  • castclass

  • refanyval

  • unbox

InvalidCastException utilise le HRESULT COR_E_INVALIDCAST dont la valeur est 0 x 80004002.

Pour obtenir la liste des valeurs initiales des propriétés d’une instance de InvalidCastException, consultez la InvalidCastException constructeurs.

Vous appelez directement ou indirectement d’un type primitif IConvertible implémentation qui ne prend pas en charge une conversion particulière. Par exemple, essayez de convertir un Boolean valeur un Char ou un DateTime valeur un Int32 lève une InvalidCastException exception. L’exemple suivant appelle la Boolean.IConvertible.ToChar et Convert.ToChar(Boolean) des méthodes pour convertir un Boolean de valeur pour un Char. Dans les deux cas, l’appel de méthode lève un InvalidCastException exception.

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.

Étant donné que la conversion n’est pas pris en charge, il n’existe aucune solution.

Vous avez appelé la Convert.ChangeType méthode pour convertir un objet d’un type vers un autre, mais un ou plusieurs types n’implémentent pas le IConvertible interface.

Dans la plupart des cas, la conversion n’est pas pris en charge, il n’existe aucune solution de contournement. Dans certains cas, une solution de contournement possible consiste à attribuer manuellement des valeurs de propriété à partir du type de source des propriétés similaires d’un type de cible.

Opérateurs restrictives définissent les conversions explicites pris en charge par un type. Un opérateur de cast en c# ou la CType méthode de conversion en Visual Basic (si Option Strict sur) est requis pour effectuer la conversion.

Toutefois, si le type de source, ni le type de cible définit explicite ou conversion entre les deux types, restrictive et IConvertible implémentation d’un ou plusieurs types ne prend pas en charge une conversion du type source vers le type cible, une InvalidCastException exception est levée.

Dans la plupart des cas, la conversion n’est pas pris en charge, il n’existe aucune solution de contournement.

Vous êtes fasse, autrement dit, essayez de convertir une instance d’un type de base à l’un de ses types dérivés. Dans l’exemple suivant, essayez de convertir un Person de l’objet à un PersonWithID objet échoue.

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.

Comme le montre l’exemple, le cast aval réussit uniquement si la Person objet a été créé par un upcast d’un PersonWithId de l’objet à un Person objet, ou si le Person objet est null.

Vous tentez de convertir un objet d’interface en un type qui implémente cette interface, mais le type cible n’est pas du même type ou une classe de base du type à partir duquel l’objet d’interface était initialement dérivée. L’exemple suivant lève une InvalidCastException exception lorsqu’il essaie de convertir un IFormatProvider de l’objet à un DateTimeFormatInfo objet. La conversion échoue parce que bien que le DateTimeFormatInfo classe implémente le IFormatProvider interface, le DateTimeFormatInfo objet n’est pas lié à la CultureInfo classe à partir duquel l’objet d’interface a été dérivé.

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()

Comme l’exception indique message, la conversion aurait réussit uniquement si l’objet d’interface est converti en une instance du type d’origine, dans ce cas un CultureInfo. La conversion réussirait également si l’objet d’interface est converti en une instance d’un type de base du type d’origine.

Vous tentez de convertir une valeur ou un objet en sa représentation de chaîne à l’aide d’un opérateur de cast en c#. Dans l’exemple suivant, les deux la tentative de cast un Char valeur en une chaîne et la tentative de convertir un entier et une chaîne de jeter un InvalidCastException exception.

using System;

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

À l’aide de Visual Basic CStr pour convertir une valeur d’un type primitif à une chaîne réussit. L’opération ne lève pas une InvalidCastException exception.

Pour correctement convertir une instance de tout type en sa représentation sous forme de chaîne, appelez sa ToString méthode, comme l’exemple suivant effectue. Le ToString méthode est toujours présente, depuis le ToString méthode est définie par le Object classe et par conséquent est héritée ou remplacée par tous les types managés.

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

Vous mettez à niveau une application Visual Basic 6.0 avec un appel à un événement personnalisé dans un contrôle utilisateur vers Visual Basic .NET et un InvalidCastException exception est levée avec le message, « le cast spécifié n’est pas valide. » Pour éviter cette exception, remplacez la ligne de code dans votre formulaire (tel que Form1)

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

et remplacez-le par la ligne de code suivante :

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1

Tous les membres statiques publics ( Shared en Visual Basic) de ce type sont thread-safe. Les membres d’instance n’ont pas la garantie d’être thread-safe.

Retour au début
Afficher: