Export (0) Print
Expand All

ArrayTypeMismatchException Class

The exception that is thrown when an attempt is made to store an element of the wrong type within an array.

For a list of all members of this type, see ArrayTypeMismatchException Members.

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

[Visual Basic]
<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

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Remarks

ArrayTypeMismatchException is thrown when the system cannot convert the element to the type declared for the array. For example, an element of type String cannot be stored in an Int32 array because conversion between these types is not supported. It is generally unnecessary for applications to throw this exception.

The following Microsoft intermediate language (MSIL) instructions throw ArrayTypeMismatchException:

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

ArrayTypeMismatchException uses the HRESULT COR_E_ARRAYTYPEMISMATCH, which has the value 0x80131503.

For a list of initial property values for an instance of ArrayTypeMismatchException, see the ArrayTypeMismatchException constructors.

Example

[Visual Basic, C#, C++] The following code example demonstrates scenarios where ArrayTypeMismatchException is thrown.

[Visual Basic] 
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] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Namespace: System

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework

Assembly: Mscorlib (in Mscorlib.dll)

See Also

ArrayTypeMismatchException Members | System Namespace | Exception | Handling and Throwing Exceptions

Show:
© 2014 Microsoft