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

FormatException, classe

 

Exception levée quand le format d’un argument n’est pas valide ou qu’une chaîne de format composite n’est pas bien formée.

Espace de noms:   System
Assembly:  mscorlib (dans 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

NomDescription
System_CAPS_pubmethodFormatException()

Initialise une nouvelle instance de la classe FormatException.

System_CAPS_protmethodFormatException(SerializationInfo, StreamingContext)

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

System_CAPS_pubmethodFormatException(String)

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

System_CAPS_pubmethodFormatException(String, Exception)

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

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

Un FormatException exception peut être levée pour l'une des raisons suivantes :

  • Dans un appel à une méthode qui convertit une chaîne en un autre type de données, la chaîne n'est pas conforme au modèle requis. Cela se produit généralement lors de l'appel des méthodes de la Convert classe et Parse et ParseExact méthodes de certains types.

    Dans la plupart des cas, en particulier si la chaîne que vous convertissez est d'entrée par un utilisateur ou lire un fichier, vous devez utiliser un try/catch bloquer et gérer les FormatException exception si la conversion échoue. Vous pouvez également remplacer l'appel à la méthode de conversion avec un appel à une TryParse ou TryParseExact (méthode), le cas échéant. Toutefois, un FormatException exception qui est levée lorsque vous essayez d'analyser une chaîne prédéfinie ou codées en dur indique une erreur de programme. Dans ce cas, vous devez corriger l'erreur plutôt que gérer l'exception.

    La conversion d'une chaîne pour les types suivants dans le System espace de noms peut lever un FormatException exception :

    • Boolean. Le Boolean.Parse(String) et Convert.ToBoolean(String) méthodes nécessitent la chaîne à convertir à « True », « true », « False » ou « false ». Toute autre valeur génère une FormatException exception.

    • Voir DateTime et DateTimeOffset. Toutes les données de date et d'heure est interprété selon les conventions de mise en forme d'une culture particulière : soit la culture du thread actuel (ou, dans certains cas, la culture de domaine d'application en cours), la culture dite indifférente, ou une culture spécifiée. Lorsque vous appelez le DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) et DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles) les méthodes, les données de date et d'heure doivent être conforme exactement à un modèle spécifié par une ou plusieurs chaînes de format standard ou chaînes de format personnalisées qui sont fournies comme arguments dans l'appel de méthode. Si elle n'est pas conforme à un modèle spécifique à la culture attendu, un FormatException exception est levée. Cela signifie que les données de date et heure enregistrées dans un format spécifique à la culture sur un système ne peuvent pas analyser correctement sur un autre système.

      Pour plus d'informations sur l'analyse des dates et heures, consultez Analyse des chaînes de date et d'heure dans .NET Framework et la documentation de la méthode qui a levé l'exception.

    • GUID. La représentation sous forme de chaîne d'un GUID doit être composé de 32 chiffres hexadécimaux (0-F) et doit être l'un de la sortie de cinq formats par le Guid.ToString (méthode). Pour plus d'informations, voir la méthode Guid.Parse.

    • Types numériques, y compris des entiers signés de tous les entiers non signés et les types à virgule flottante. La chaîne à analyser doit se composer des chiffres 0-9 Latin. Un signe positif ou négatif, séparateur décimal, séparateurs de groupes et le symbole monétaire peuvent également être autorisés. Tentative d'analyser une chaîne qui contient tout autre caractère toujours lève une FormatException exception.

      Toutes les chaînes numériques sont interprétées selon les conventions de mise en forme d'une culture particulière : soit la culture du thread actuel (ou, dans certains cas, la culture de domaine d'application en cours), la culture dite indifférente, ou une culture spécifiée. Par conséquent, une chaîne numérique est analysée à l'aide des conventions d'une culture peut échouer lorsque vous utilisez les conventions d'une autre.

      Pour plus d'informations sur l'analyse de chaînes numériques, consultez la page Analyse de chaînes numériques dans .NET Framework et la documentation de la méthode qui a levé l'exception spécifique.

    • Intervalles de temps. La chaîne à analyser doit être dans un format indépendant de la culture fixe ou dans un format dépendante de la culture définie par la culture du thread actuel (ou, dans certains cas, la culture de domaine d'application en cours), la culture dite indifférente, ou une culture spécifiée. Si la chaîne n'est pas dans un format approprié, ou si, au minimum, jours, heures, et les composants de minutes de l'intervalle de temps ne sont pas présents, la méthode d'analyse lève une FormatException exception. Pour plus d'informations, consultez la documentation pour les TimeSpan l'analyse de méthode qui a levé l'exception.

  • Un type implémente le IFormattable interface, qui prend en charge les chaînes de format qui définit comment un objet est converti en sa représentation sous forme de chaîne, et une chaîne de format non valide est utilisée. Il s'agit d'une opération de mise en forme le plus courant. Dans l'exemple suivant, la chaîne de format standard « Q » est utilisée dans une chaîne de format composite pour formater un numéro. Toutefois, « Q » n'est pas valide chaîne de format standard.

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

    Cette exception provoque d'une erreur de codage. Pour corriger cette erreur, supprimez la chaîne de format ou remplacer un. L'exemple suivant corrige l'erreur en remplaçant la chaîne de format non valide avec la chaîne de format « C » (devise).

    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.
    

    Un FormatException exception peut également être levée par l'analyse de méthodes, telles que DateTime.ParseExact et Guid.ParseExact, qui requiert que la chaîne doit être analysé pour se conformer exactement au modèle spécifié par une chaîne de format. Dans l'exemple suivant, la représentation sous forme de chaîne d'un GUID doit être conforme au modèle spécifié par la chaîne de format standard « G ». Toutefois, la Guid l'implémentation de structure IFormattable ne prend pas en charge la chaîne de format « G ».

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

    Cette exception entraîne également à partir d'une erreur de codage. Pour y remédier, appeler une méthode d'analyse qui ne nécessite pas un format précis, tel que DateTime.Parse ou Guid.Parse, ou la remplacer par une chaîne de format valide. L'exemple suivant corrige l'erreur en appelant le Guid.Parse (méthode).

    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
    
  • Un ou plusieurs des index des éléments de format dans un chaîne de format composite est supérieur à l'index des éléments du tableau d'objet liste ou un paramètre. Dans l'exemple suivant, le plus grand index d'un élément de format dans la chaîne de format est 3. Les index des éléments dans la liste d'objets sont de base zéro, la chaîne de format nécessite que la liste d'objets à quatre éléments. Au lieu de cela, il a uniquement trois, dat, temp, et scale, de sorte que le code génère un FormatException exception au moment de l'exécution:.

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

    Dans ce cas, le FormatException exception est le résultat d'erreur de développeur. Il doit être corrigé plutôt que traitée dans un try/catch bloc en s'assurant que chaque élément dans la liste de l'objet correspond à l'index d'un élément de format. Pour corriger cet exemple, modifiez l'index du second élément de format pour faire référence à la dat variable et la décrémentation de l'index de chaque élément de format suivants par une.

    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
    
  • La chaîne de format composite n'est pas bien formée. Dans ce cas, le FormatException exception est toujours un résultat d'erreur de développeur. Il doit être corrigé plutôt que traitée dans un try/catch bloc.

    Essaie d'inclure les accolades littérales dans une chaîne, comme l'exemple suivant est, l'exception est levée.

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

    La technique recommandée pour y compris les accolades littérales dans une chaîne de format composite est pour les inclure dans la liste d'objets et éléments de format pour les insérer dans la chaîne de résultat. Par exemple, vous pouvez modifier la chaîne de format composite précédente comme indiqué ici.

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

    L'exception est également levée si votre chaîne de format contient une faute de frappe. L'appel suivant à la String.Format méthode omet une accolade fermante et associe une accolade ouvrante par un crochet fermant.

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

    Pour corriger cette erreur, assurez-vous que tous les ouvrir et fermer les accolades correspondent.

    String result = String.Format("{0} + {1} = {2}", 
                                  n1, n2, n1 + n2);
    
  • Vous avez fourni la liste d'objets dans un tableau de paramètres fortement typés, la méthode de mise en forme composite et FormatException exception indique que l'index d'un ou plusieurs éléments de format dépasse le nombre d'arguments dans la liste d'objets. Cela se produit, car aucune conversion explicite entre les types tableau n'existe, c'est que le compilateur traite le tableau comme un argument unique plutôt que comme un tableau de paramètres. Par exemple, l'appel suivant à la Console.WriteLine(String, Object[]) méthode lève une exception une FormatException exception, bien que l'index le plus élevé des éléments de format est 3 et le tableau de paramètres de type Int32 a quatre éléments.

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

    Au lieu de traiter cette exception, vous devez éliminer la cause. Étant donné que Visual Basic ni c# peut convertir un tableau d'entiers en tableau d'objets, vous devez effectuer la conversion avant d'appeler la méthode de mise en forme composite. L'exemple suivant fournit une implémentation.

    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 utilise le HRESULT COR_E_FORMAT dont la valeur est 0 x 80131537.

Le FormatException dérive de la classe Exception et l'ajoute pas de membres uniques. Pour obtenir la liste des valeurs initiales des propriétés d'une instance de FormatException, consultez la FormatException constructeurs.

Universal Windows Platform
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Portable Class Library
Pris en charge dans : portable .NET platforms
Silverlight
Disponible depuis 2.0
Windows Phone Silverlight
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1

Tous les membres statiques (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Retour au début
Afficher: