次の方法で共有


ArrayTypeMismatchException クラス

間違った型の要素を配列に格納しようとするとスローされる例外。

この型のすべてのメンバの一覧については、ArrayTypeMismatchException メンバ を参照してください。

System.Object
   System.Exception
      System.SystemException
         System.ArrayTypeMismatchException

<Serializable>
Public Class ArrayTypeMismatchException   Inherits SystemException
[C#]
[Serializable]
public class ArrayTypeMismatchException : SystemException
[C++]
[Serializable]
public __gc class ArrayTypeMismatchException : public   SystemException
[JScript]
public
   Serializable
class ArrayTypeMismatchException extends SystemException

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

ArrayTypeMismatchException は、システムが要素の型を配列に対して宣言されている型に変換できないときにスローされます。たとえば、 String 型の要素は、 Int32 配列には格納できません。これは、これらの型の間の変換がサポートされていないためです。通常、アプリケーションでこの例外をスローする必要はありません。

次の MSIL (Microsoft Intermediate Language) 命令は、 ArrayTypeMismatchException をスローします。

  • ldelem.<type>
  • ldelema
  • stelem.<type>

ArrayTypeMismatchException は、値 0x80131503 を保持する HRESULT COR_E_ARRAYTYPEMISMATCH を使用します。

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

使用例

[Visual Basic, C#, C++] ArrayTypeMismatchException がスローされる場合のコード例を次に示します。

 
Option Explicit On 
Option Strict On

Imports System


Namespace ArrayTypeMismatch

   Class Class1

      'Entry point which delegates to C-style main Private Function
      Public Overloads Shared Sub Main()
         Main(System.Environment.GetCommandLineArgs())
      End Sub

      Overloads Shared Sub Main(ByVal args() As String)
         
         Dim names As String() = {"Dog", "Cat", "Fish"}
         Dim objs As System.Object() = CType(names, System.Object())

         Try
            objs(2) = "Mouse"

            Dim animalName As Object
            For Each animalName In objs
               System.Console.WriteLine(animalName)
            Next animalName
         Catch exp As System.ArrayTypeMismatchException
            ' Not reached, "Mouse" is of the correct type.
            System.Console.WriteLine("Exception Thrown.")
         End Try

         Try
            Dim obj As System.Object
            obj = CType(13, System.Object)
            objs(2) = obj
         Catch exp As System.ArrayTypeMismatchException
            ' Always reached, 13 is not a string.
            System.Console.WriteLine("New element is not of the correct type.")
         End Try

         ' Set objs to an array of objects instead of an array of strings.
         Dim objs2(3) As System.Object
         Try
            objs2(0) = "Turtle"
            objs2(1) = 12
            objs2(2) = 2.341

            Dim element As Object
            For Each element In objs2
               System.Console.WriteLine(element)
            Next element
         Catch exp As System.ArrayTypeMismatchException
            ' ArrayTypeMismatchException is not thrown this time.
            System.Console.WriteLine("Exception Thrown.")
         End Try
         
      End Sub
   End Class
End Namespace

[C#] 
using System;

namespace ArrayTypeMismatch
{
    class Class1
    {
        static void Main(string[] args) {
            string[] names = {"Dog", "Cat", "Fish"};
            Object[] objs  = (Object[]) names;

            try {
                objs[2] = "Mouse";

                foreach (object animalName in objs) {
                    System.Console.WriteLine(animalName);
                }
            }
            catch (System.ArrayTypeMismatchException) {
                // Not reached, "Mouse" is of the correct type.
                System.Console.WriteLine("Exception Thrown.");
            }

            try {
                Object obj = (Object) 13;
                objs[2] = obj;
            }
            catch (System.ArrayTypeMismatchException) {
                // Always reached, 13 is not a string.
                System.Console.WriteLine("New element is not of the " +
                                                         "correct type.");
            }
    
            // Set objs to an array of objects instead of an array of strings.
            objs  = new Object[3];
            try {
                objs[0] = (Object) "Turtle";
                objs[1] = (Object) 12;
                objs[2] = (Object) 2.341;

                foreach (object element in objs) {
                    System.Console.WriteLine(element);
                }
            }
            catch (System.ArrayTypeMismatchException) {
                // ArrayTypeMismatchException is not thrown this time.
                System.Console.WriteLine("Exception Thrown.");
            }
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;

int main() {

   String* names __gc[] = {"Dog", "Cat", "Fish"};
   Object* objs __gc[]  = dynamic_cast<Object* __gc[]>(names);

   try {
      objs[2] = dynamic_cast<Object*>(S"Mouse");

      for( Int32 i = 0; i < objs->Length; i++) {
         Console::WriteLine(objs[i]);
      }
   }

   catch (System::ArrayTypeMismatchException*) {
      // Not reached, "Mouse" is of the correct type
      Console::WriteLine("Exception Thrown");
   }

   try {
      Object* obj = __box(13);
      objs[2] = obj;
   }
   catch (System::ArrayTypeMismatchException*) {
      // Always reached, 13 is not a string.
      Console::WriteLine("New element is not of the correct type");
   }

   // Set obj to an array of objects instead of an array of strings

   Object* objs2 __gc[] = new Object*[3];

   try {
      objs2[0] = dynamic_cast<Object*>(S"Turtle");
      objs2[1] = __box(12);
      objs2[2] = __box(2.341);

      for(Int32 i = 0; i < objs->Length; i++) {
         Console::WriteLine(objs2[i]);
      }
   }
   catch (System::ArrayTypeMismatchException*) {
      // ArrayTypeMismatchException is not thrown this time.
      Console::WriteLine("Exception Thrown");
   }

}

/*expected return values:
Dog
Cat
Mouse
New element is not of the correct type
Turtle
12
2.341
*/

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

ArrayTypeMismatchException メンバ | System 名前空間 | Exception | 例外の処理とスロー