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

NotSupportedException classe

 

Date de publication : novembre 2016

Exception levée quand une méthode appelée n'est pas prise en charge ou pendant une tentative de lecture, recherche ou écriture dans un flux qui ne prend pas en charge la fonctionnalité appelée.

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

System.Object
  System.Exception
    System.SystemException
      System.NotSupportedException
        System.PlatformNotSupportedException

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

NomDescription
System_CAPS_pubmethodNotSupportedException()

Initialise une nouvelle instance de la NotSupportedException classe, en définissant le Message propriété de la nouvelle instance à un message système qui décrit l’erreur. Ce message prend en compte la culture système en cours.

System_CAPS_protmethodNotSupportedException(SerializationInfo, StreamingContext)

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

System_CAPS_pubmethodNotSupportedException(String)

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

System_CAPS_pubmethodNotSupportedException(String, Exception)

Initialise une nouvelle instance de la classe NotSupportedException 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.)

NotSupportedException Indique qu’aucune implémentation n’existe pour une méthode appelée ou la propriété.

NotSupportedException utilise le HRESULT COR_E_NOTSUPPORTED dont la valeur est 0 x 80131515.

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

Vous pouvez envisager de lever un NotSupportedException exception dans les cas suivants :

  • Vous implémentez une interface générale et nombre de méthodes n’ont aucune implémentation explicite. Par exemple, si vous créez une date et une heure type qui implémente le IConvertible interface, vous devez lever une NotSupportedException exception pour la plupart des conversions.

  • Vous avez hérité d’une classe abstraite qui requiert que vous substituez un certain nombre de méthodes. Toutefois, vous êtes prêt uniquement pour fournir une implémentation pour un sous-ensemble de ces méthodes. Pour les méthodes que vous décidez de ne pas mettre en œuvre, vous pouvez choisir de lever un NotSupportedException.

  • Vous définissez un type à usage général avec un état qui permet des opérations de manière conditionnelle. Par exemple, votre type peut être en lecture seule ou en lecture-écriture. Dans ce cas :

    • Si l’objet est en lecture seule, essayez d’affecter des valeurs aux propriétés d’une instance ou appellent des méthodes qui modifient l’état de l’instance doit lever une NotSupportedException exception.

    • Vous devez implémenter une propriété qui retourne un Boolean valeur qui indique si une fonctionnalité particulière est disponible. Par exemple, pour un type qui peut être en lecture seule ou en lecture-écriture, vous pouvez implémenter un IsReadOnly propriété qui indique si l’ensemble des méthodes de lecture sont disponibles ou non disponible.

Le NotSupportedException exception indique qu’une méthode n’a aucune implémentation, et que vous ne devez pas l’appeler. Vous ne devez pas gérer l’exception. Au lieu de cela, vous devez effectuer varie selon la cause de l’exception : si une implémentation est totalement absente ou l’appel de membre est incohérent dans le but d’objet (tel qu’un appel à la FileStream.Read méthode en lecture seule FileStream objet.

Une implémentation n’a pas été fournie, car l’opération ne peut pas être effectuée de manière explicite.

Il s’agit une exception courante lorsque vous appelez des méthodes sur un objet qui fournit des implémentations pour les méthodes de classe de base abstraite, ou qui implémente une interface à usage général et la méthode n’a aucune implémentation explicite.

Par exemple, le Convert la classe implémente le IConvertible interface, ce qui signifie qu’il doit inclure une méthode pour convertir chaque type primitif à tous les autres types primitifs. La plupart de ces conversions, toutefois, ne sont pas possibles. Par conséquent, un appel à la Convert.ToBoolean(DateTime) méthode, par exemple, lève un NotSupportedException exception, car aucune conversion n’est possible entre une DateTime et une Boolean valeur

Pour éliminer l’exception, vous devez supprimer l’appel de méthode.

L’appel de méthode n’est pas pris en charge étant donné l’état de l’objet.

Vous tentez d’appeler un membre dont la fonctionnalité n’est pas disponible en raison de l’état de l’objet. Vous pouvez éliminer l’exception de trois manières :

  • Vous connaissez l’état de l’objet à l’avance, mais vous avez appelé une méthode non prise en charge ou une propriété. Dans ce cas, l’appel de membre est une erreur, et vous pouvez l’éliminer.

  • Vous connaissez l’état de l’objet à l’avance (généralement parce que votre code a instancié), mais l’objet est mal configuré. L’exemple suivant illustre ce problème. Il crée en lecture seule FileStream objet puis tente d’y accéder en écriture.

    using System;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    
    public class Example
    {
       public static void Main()
       {
          Encoding enc = Encoding.Unicode;
          String value = "This is a string to persist.";
          Byte[] bytes  = enc.GetBytes(value);
    
          FileStream fs = new FileStream(@".\TestFile.dat", 
                                         FileMode.Open,
                                         FileAccess.Read);
          Task t = fs.WriteAsync(enc.GetPreamble(), 0, enc.GetPreamble().Length);
          Task t2 = t.ContinueWith( (a) => fs.WriteAsync(bytes, 0, bytes.Length) ); 
          t2.Wait();
          fs.Close();
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.NotSupportedException: Stream does not support writing.
    //       at System.IO.Stream.BeginWriteInternal(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state
    //    , Boolean serializeAsynchronously)
    //       at System.IO.FileStream.BeginWrite(Byte[] array, Int32 offset, Int32 numBytes, AsyncCallback userCallback, Object sta
    //    teObject)
    //       at System.IO.Stream.<>c.<BeginEndWriteAsync>b__53_0(Stream stream, ReadWriteParameters args, AsyncCallback callback,
    //    Object state)
    //       at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance,TArgs](TInstance thisRef, TArgs args, Func`5 beginMet
    //    hod, Func`3 endMethod)
    //       at System.IO.Stream.BeginEndWriteAsync(Byte[] buffer, Int32 offset, Int32 count)
    //       at System.IO.FileStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
    //       at System.IO.Stream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count)
    //       at Example.Main()
    

    Vous pouvez éliminer l’exception en veillant à ce que l’objet instancié prend en charge les fonctionnalités que vous avez l’intention. L’exemple suivant corrige le problème de lecture seule FileStream objet en fournissant les arguments appropriés pour le FileStream.FileStream(String, FileMode, FileAccess) constructeur.

  • Vous ne savez pas l’état de l’objet à l’avance et l’objet ne prend pas en charge une opération particulière. Dans la plupart des cas, l’objet doit inclure une propriété ou une méthode qui indique si elle prend en charge un ensemble spécifique d’opérations. Vous pouvez éliminer l’exception en vérifiant la valeur de l’objet et en appelant le membre uniquement si l’option appropriée.

    L’exemple suivant définit un DetectEncoding méthode qui lève un NotSupportedException exception lorsqu’il essaie de lire à partir du début d’un flux qui ne prend pas en charge l’accès en lecture.

    using System;
    using System.IO;
    using System.Threading.Tasks;
    
    public class Example
    {
       public static void Main()
       {
          String name = @".\TestFile.dat";
          var fs = new FileStream(name, 
                                  FileMode.Create,
                                  FileAccess.Write);
             Console.WriteLine("Filename: {0}, Encoding: {1}", 
                               name, FileUtilities.GetEncodingType(fs));
       }
    }
    
    public class FileUtilities
    {
       public enum EncodingType
       { None = 0, Unknown = -1, Utf8 = 1, Utf16 = 2, Utf32 = 3 }
    
       public static EncodingType GetEncodingType(FileStream fs)
       {
          Byte[] bytes = new Byte[4];
          var t = fs.ReadAsync(bytes, 0, 4);
          t.Wait();
          int bytesRead = t.Result;
          if (bytesRead < 2)
             return EncodingType.None;
    
          if (bytesRead >= 3 & (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF))
             return EncodingType.Utf8;
    
          if (bytesRead == 4) { 
             var value = BitConverter.ToUInt32(bytes, 0);
             if (value == 0x0000FEFF | value == 0xFEFF0000)
                return EncodingType.Utf32;
          }
    
          var value16 = BitConverter.ToUInt16(bytes, 0);
          if (value16 == (ushort)0xFEFF | value16 == (ushort)0xFFFE) 
             return EncodingType.Utf16;
    
          return EncodingType.Unknown;
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.NotSupportedException: Stream does not support reading.
    //       at System.IO.Stream.BeginReadInternal(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state,
    //     Boolean serializeAsynchronously)
    //       at System.IO.FileStream.BeginRead(Byte[] array, Int32 offset, Int32 numBytes, AsyncCallback userCallback, Object stat
    //    eObject)
    //       at System.IO.Stream.<>c.<BeginEndReadAsync>b__43_0(Stream stream, ReadWriteParameters args, AsyncCallback callback, O
    //    bject state)
    //       at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance,TArgs](TInstance thisRef, TArgs args, Func`5 beginMet
    //    hod, Func`3 endMethod)
    //       at System.IO.Stream.BeginEndReadAsync(Byte[] buffer, Int32 offset, Int32 count)
    //       at System.IO.FileStream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
    //       at System.IO.Stream.ReadAsync(Byte[] buffer, Int32 offset, Int32 count)
    //       at FileUtilities.GetEncodingType(FileStream fs)
    //       at Example.Main()
    

    Vous pouvez éliminer l’exception en examinant la valeur de la FileStream.CanRead de propriété et de sortie de la méthode si le flux est en lecture seule.

       public static EncodingType GetEncodingType(FileStream fs)
       {
          if (!fs.CanRead) 
             return EncodingType.Unknown;
    
          Byte[] bytes = new Byte[4];
          var t = fs.ReadAsync(bytes, 0, 4);
          t.Wait();
          int bytesRead = t.Result;
          if (bytesRead < 2)
             return EncodingType.None;
    
          if (bytesRead >= 3 & (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF))
             return EncodingType.Utf8;
    
          if (bytesRead == 4) { 
             var value = BitConverter.ToUInt32(bytes, 0);
             if (value == 0x0000FEFF | value == 0xFEFF0000)
                return EncodingType.Utf32;
          }
    
          var value16 = BitConverter.ToUInt16(bytes, 0);
          if (value16 == (ushort)0xFEFF | value16 == (ushort)0xFFFE) 
             return EncodingType.Utf16;
    
          return EncodingType.Unknown;
       }
    }
    // The example displays the following output:
    //       Filename: .\TestFile.dat, Encoding: Unknown
    

Le NotSupportedException exception est étroitement liée à deux autres types d’exception ;

NotImplementedException.

Cette exception est levée lorsqu’une méthode peut être implémentée, mais n’est pas, soit parce que le membre sera implémenté dans une version ultérieure, le membre n’est pas disponible sur une plateforme spécifique, ou le membre appartient à une classe abstraite et une classe dérivée doit fournir une implémentation.

InvalidOperationException

Cette exception est levée dans les scénarios dans lesquels il est généralement parfois possible pour l’objet d’effectuer l’opération demandée et l’état de l’objet détermine si l’opération peut être effectuée.

Lorsque vous utilisez .NET Compact Framework et P/Invoke sur une fonction native, cette exception peut être levée dans les cas suivants :

  • la déclaration dans le code managé est incorrecte ;

  • .NET Compact Framework ne prend pas en charge l'opération que vous tentez d'effectuer ;

  • les noms de DLL sont tronqués lors de l'exportation.

Si un NotSupportedException exception est levée, vérifiez :

  • Recherchez toutes violations des restrictions P/Invoke de .NET Compact Framework.

  • Recherchez tous les arguments qui requièrent de la mémoire pré-allouée. Si vous en trouvez, vous devez passer une référence à une variable existante.

  • Vérifiez que les noms des fonctions exportées sont corrects. Cela peut être vérifié avec DumpBin.exe.

  • Vérifiez que vous n’essayez pas de passer un trop grand nombre d’arguments.

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: