NotSupportedException クラス

定義

呼び出されたメソッドがサポートされていない場合、または呼び出された機能をサポートしないストリームに対して読み取り、シーク、または書き込みを行おうとした場合にスローされる例外。

public ref class NotSupportedException : Exception
public ref class NotSupportedException : SystemException
public class NotSupportedException : Exception
public class NotSupportedException : SystemException
[System.Serializable]
public class NotSupportedException : SystemException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class NotSupportedException : SystemException
type NotSupportedException = class
    inherit Exception
type NotSupportedException = class
    inherit SystemException
[<System.Serializable>]
type NotSupportedException = class
    inherit SystemException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type NotSupportedException = class
    inherit SystemException
Public Class NotSupportedException
Inherits Exception
Public Class NotSupportedException
Inherits SystemException
継承
NotSupportedException
継承
NotSupportedException
派生
属性

注釈

NotSupportedException 呼び出されたメソッドまたはプロパティに実装が存在しないことを示します。

NotSupportedException では、値0x80131515 を持つ HRESULT COR_E_NOTSUPPORTED が使用されます。

インスタンスの初期プロパティ値の一覧についてはNotSupportedExceptionを参照してください、NotSupportedExceptionコンス トラクター。

NotSupportedException 例外のスロー

次の場合は、例外をスローすることを検討してください NotSupportedException

  • 汎用インターフェイスを実装しています。メソッドの数には意味のある実装がありません。 たとえば、インターフェイスを実装する日付と時刻の型を作成する場合、 IConvertible NotSupportedException ほとんどの変換に対して例外をスローします。

  • いくつかのメソッドをオーバーライドする必要がある抽象クラスから継承しました。 ただし、これらのサブセットの実装を提供するための準備が整っているだけです。 実装しないように決定したメソッドについては、をスローすることを選択でき NotSupportedException ます。

  • 操作を条件付きで有効にする状態を持つ汎用型を定義しています。 たとえば、読み取り専用または読み取り/書き込みのいずれかの型を指定できます。 そのような場合は、次の処理を行います。

    • オブジェクトが読み取り専用の場合、インスタンスのプロパティに値を割り当てるか、インスタンスの状態を変更するメソッドを呼び出すと、例外がスローさ NotSupportedException れます。

    • Boolean特定の機能が使用可能かどうかを示す値を返すプロパティを実装する必要があります。 たとえば、読み取り専用または読み取り/書き込み可能な型の場合、 IsReadOnly 読み取り/書き込みメソッドのセットが使用可能か使用できないかを示すプロパティを実装できます。

NotSupportedException 例外の処理

例外は、メソッドが実装されていないことを示してい NotSupportedException ます。メソッドを呼び出すことはできません。 例外を処理することはできません。 代わりに、実装が完全に存在しないか、またはメンバーの呼び出しがオブジェクトの目的 ( FileStream.Write 読み取り専用オブジェクトのメソッドの呼び出しなど) と一致しない場合に、例外の原因によって異なります。 FileStream

操作を意味のある方法で実行できないため、実装が提供されていません。
抽象基本クラスのメソッドの実装を提供するオブジェクトに対してメソッドを呼び出している場合、または汎用インターフェイスを実装していて、メソッドに意味のある実装がない場合、これは一般的な例外です。

たとえば、クラスは Convert インターフェイスを実装します IConvertible 。これは、すべてのプリミティブ型を他のすべてのプリミティブ型に変換するメソッドを含める必要があることを意味します。 ただし、変換の多くはできません。 その結果、 Convert.ToBoolean(DateTime) NotSupportedException DateTime との値の間で変換が行われないため、メソッドの呼び出しによって例外がスローされます。 Boolean

例外を除去するには、メソッド呼び出しを削除する必要があります。

オブジェクトの状態では、メソッドの呼び出しはサポートされていません。
オブジェクトの状態が原因で使用できない機能を持つメンバーを呼び出そうとしています。 次の3つの方法のいずれかで例外を除去できます。

  • オブジェクトの状態は事前にわかっていますが、サポートされていないメソッドまたはプロパティを呼び出しました。 この場合、メンバー呼び出しはエラーであり、削除することができます。

  • オブジェクトの状態が事前にわかっている (通常は、コードによってインスタンス化されているため)。しかし、オブジェクトが不適切に構成されています。 次の例は、この問題を示しています。 読み取り専用のオブジェクトを作成 FileStream し、そのオブジェクトへの書き込みを試みます。

    using System;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    
    public class Example
    {
       public static async Task 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) );
          await t2;
          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()
    
    Imports System.IO
    Imports System.Text
    Imports System.Threading.Tasks
    
    Module Example
       Public Sub Main()
          Dim enc As Encoding = Encoding.Unicode
          Dim value As String = "This is a string to persist."
          Dim bytes() As Byte = enc.GetBytes(value)
    
          Dim fs As New FileStream(".\TestFile.dat", 
                                   FileMode.Open,
                                   FileAccess.Read)
          Dim t As Task = fs.WriteAsync(enc.GetPreamble(), 0, enc.GetPreamble().Length)
          Dim t2 As Task = t.ContinueWith(Sub(a) fs.WriteAsync(bytes, 0, bytes.Length)) 
          t2.Wait()
          fs.Close()
       End Sub
    End Module
    ' 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()
    

    インスタンス化されたオブジェクトが意図した機能をサポートしていることを確認することで、例外を排除できます。 次の例では、 FileStream コンストラクターに正しい引数を指定することによって、読み取り専用オブジェクトの問題を解決し FileStream.FileStream(String, FileMode, FileAccess) ます。

  • オブジェクトの状態が事前にわからず、オブジェクトが特定の操作をサポートしていません。 ほとんどの場合、オブジェクトには、特定の操作のセットをサポートするかどうかを示すプロパティまたはメソッドが含まれている必要があります。 オブジェクトの値を確認し、必要な場合にのみメンバーを呼び出すことにより、例外を除去できます。

    次の例では、 DetectEncoding NotSupportedException 読み取りアクセスをサポートしていないストリームの先頭から読み取ろうとしたときに例外をスローするメソッドを定義しています。

    using System;
    using System.IO;
    using System.Threading.Tasks;
    
    public class Example
    {
       public static async Task Main()
       {
          String name = @".\TestFile.dat";
          var fs = new FileStream(name,
                                  FileMode.Create,
                                  FileAccess.Write);
             Console.WriteLine("Filename: {0}, Encoding: {1}",
                               name, await FileUtilities.GetEncodingType(fs));
       }
    }
    
    public class FileUtilities
    {
       public enum EncodingType
       { None = 0, Unknown = -1, Utf8 = 1, Utf16 = 2, Utf32 = 3 }
    
       public async static Task<EncodingType> GetEncodingType(FileStream fs)
       {
          Byte[] bytes = new Byte[4];
          int bytesRead = await fs.ReadAsync(bytes, 0, 4);
          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.FileStream.BeginRead(Byte[] array, Int32 offset, Int32 numBytes, AsyncCallback callback, Object state)
    //       at System.IO.Stream.<>c.<BeginEndReadAsync>b__46_0(Stream stream, ReadWriteParameters args, AsyncCallback callback, Object state)
    //       at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance, TArgs](TInstance thisRef, TArgs args, Func`5 beginMethod, 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) in C:\Work\docs\program.cs:line 26
    //       at Example.Main() in C:\Work\docs\program.cs:line 13
    //       at Example.<Main>()
    
    Imports System.IO
    Imports System.Threading.Tasks
    
    Module Example
       Public Sub Main()
          Dim name As String = ".\TestFile.dat"
          Dim fs As New FileStream(name, 
                                   FileMode.Create,
                                   FileAccess.Write)
          Console.WriteLine("Filename: {0}, Encoding: {1}", 
                            name, FileUtilities.GetEncodingType(fs))
       End Sub
    End Module
    
    Public Class FileUtilities
       Public Enum EncodingType As Integer
          None = 0
          Unknown = -1
          Utf8 = 1
          Utf16 = 2
          Utf32 = 3
       End Enum
       
       Public Shared Function GetEncodingType(fs As FileStream) As EncodingType
          Dim bytes(3) As Byte
          Dim t As Task(Of Integer) = fs.ReadAsync(bytes, 0, 4)
          t.Wait()
          Dim bytesRead As Integer = t.Result
          If bytesRead < 2 Then Return EncodingType.None
          
          If bytesRead >= 3 And (bytes(0) = &hEF AndAlso bytes(1) = &hBB AndAlso bytes(2) = &hBF) Then
             Return EncodingType.Utf8
          End If
          
          If bytesRead = 4 Then 
             Dim value As UInteger = BitConverter.ToUInt32(bytes, 0)
             If value = &h0000FEFF Or value = &hFEFF0000 Then
                Return EncodingType.Utf32
             End If
          End If
          
          Dim value16 As UInt16 = BitConverter.ToUInt16(bytes, 0)
          If value16 = &hFEFF Or value16 = &hFFFE Then 
             Return EncodingType.Utf16
          End If
          
          Return EncodingType.Unknown
       End Function
    End Class
    ' 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()
    

    この例外を回避するには、プロパティの値を調べ、 FileStream.CanRead ストリームが読み取り専用の場合はメソッドを終了します。

       public static async Task<EncodingType> GetEncodingType(FileStream fs)
       {
          if (!fs.CanRead)
             return EncodingType.Unknown;
    
          Byte[] bytes = new Byte[4];
          int bytesRead = await fs.ReadAsync(bytes, 0, 4);
          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
    
    Public Class FileUtilities
       Public Enum EncodingType As Integer
          None = 0
          Unknown = -1
          Utf8 = 1
          Utf16 = 2
          Utf32 = 3
       End Enum
       
       Public Shared Function GetEncodingType(fs As FileStream) As EncodingType
          If Not fs.CanRead Then
             Return EncodingType.Unknown
    
          Dim bytes(3) As Byte
          Dim t As Task(Of Integer) = fs.ReadAsync(bytes, 0, 4)
          t.Wait()
          Dim bytesRead As Integer = t.Result
          If bytesRead < 2 Then Return EncodingType.None
          
          If bytesRead >= 3 And (bytes(0) = &hEF AndAlso bytes(1) = &hBB AndAlso bytes(2) = &hBF) Then
             Return EncodingType.Utf8
          End If
          
          If bytesRead = 4 Then 
             Dim value As UInteger = BitConverter.ToUInt32(bytes, 0)
             If value = &h0000FEFF Or value = &hFEFF0000 Then
                Return EncodingType.Utf32
             End If
          End If
          
          Dim value16 As UInt16 = BitConverter.ToUInt16(bytes, 0)
          If value16 = &hFEFF Or value16 = &hFFFE Then 
             Return EncodingType.Utf16
          End If
          
          Return EncodingType.Unknown
       End Function
    End Class
    ' The example displays the following output:
    '       Filename: .\TestFile.dat, Encoding: Unknown
    

NotSupportedException例外は、他の2つの例外の種類と密接に関連しています。

NotImplementedException.
この例外は、メソッドが実装されているが、そのメンバーが新しいバージョンで実装される場合、メンバーが特定のプラットフォームで使用できない場合、またはメンバーが抽象クラスに属していて、派生クラスが実装を提供する必要がある場合にスローされます。

InvalidOperationException
この例外は、要求された操作をオブジェクトが実行できる可能性がある場合にスローされます。また、オブジェクトの状態によって、操作を実行できるかどうかが決まります。

.NET Compact Framework メモ

.NET Compact Framework を操作し、ネイティブ関数で P/Invoke を使用する場合、次の場合にこの例外がスローされる可能性があります。

  • マネージド コード内の宣言が正しくない。

  • .NET Compact Framework は、実行しようとしている処理をサポートしていません。

  • エクスポート時に DLL 名が変形処理されている。

NotSupportedException例外がスローされた場合は、次のチェックボックスをオンにします。

  • .NET Compact Framework の P/Invoke 制限の違反。

  • 割り当て済みのメモリを必要とする引数。 存在する場合は、既存の変数への参照を渡す必要があります。

  • エクスポートされた関数の名前が正しいかどうか。 これは DumpBin.exeで確認できます。

  • 渡そうとしている引数の数が多すぎないかどうか。

コンストラクター

NotSupportedException()

NotSupportedException クラスの新しいインスタンスの Message プロパティを初期化し、その値としてエラーを説明するシステム提供のメッセージを指定します。 このメッセージには、システムの現在のカルチャが考慮されます。

NotSupportedException(SerializationInfo, StreamingContext)

シリアル化したデータを使用して、NotSupportedException クラスの新しいインスタンスを初期化します。

NotSupportedException(String)

指定したエラー メッセージを使用して、NotSupportedException クラスの新しいインスタンスを初期化します。

NotSupportedException(String, Exception)

指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、NotSupportedException クラスの新しいインスタンスを初期化します。

プロパティ

Data

例外に関する追加のユーザー定義情報を提供する、キーと値のペアのコレクションを取得します。

(継承元 Exception)
HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。

(継承元 Exception)
HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。

(継承元 Exception)
InnerException

現在の例外の原因となる Exception インスタンスを取得します。

(継承元 Exception)
Message

現在の例外を説明するメッセージを取得します。

(継承元 Exception)
Source

エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。

(継承元 Exception)
StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。

(継承元 Exception)
TargetSite

現在の例外がスローされたメソッドを取得します。

(継承元 Exception)

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の根本原因である Exception を返します。

(継承元 Exception)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetObjectData(SerializationInfo, StreamingContext)

派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。

(継承元 Exception)
GetType()

現在のインスタンスのランタイム型を取得します。

(継承元 Exception)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在の例外の文字列形式を作成して返します。

(継承元 Exception)

イベント

SerializeObjectState
互換性のために残されています。

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。

(継承元 Exception)

適用対象

こちらもご覧ください