情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.MakeArrayType メソッド (Int32)

2013/12/12

次元数を指定して現在の型の配列を表す Type オブジェクトを返します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public virtual Type MakeArrayType(
	int rank
)

パラメーター

rank
型: System.Int32
配列の次元数。この番号には 32 以下を指定する必要があります。

戻り値

型: System.Type
次元数を指定して現在の型の配列を表す Type オブジェクト。

例外条件
IndexOutOfRangeException

rank が無効です。たとえば、0 または負の値です。

NotSupportedException

呼び出されたメソッドは、基本クラスではサポートされません。

TypeLoadException

現在の型は、ByRef 型です。つまり、Type.IsByReftrue を返します。

または

rank が 32 より大きい値です。

MakeArrayType メソッドは、実行時に計算される要素型を持つ配列型を生成する手段を提供します。

メモメモ:

共通言語ランタイムは、ベクターの識別 (常にインデックス番号が 0 から始まる 1 次元配列と多次元配列) を行います。常に 1 次元配列のみを持つベクターは、たまたま 1 次元のみを持っている多次元配列と同じではありません。rank が 1 の場合は、このメソッド オーバーロードを使用してベクター型を作成することはできません。このメソッド オーバーロードは、1 つの次元を持っている多次元配列型を返します。MakeArrayType() メソッド オーバーロードを使用してベクター型を作成します。

Test クラスの配列、ref (Visual Basic の場合は ByRef)、およびポインター型を作成するコード例を次に示します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // Create a Type object that represents a one-dimensional
      // array of Example objects.
      Type t = typeof(Example).MakeArrayType();
      outputBlock.Text += String.Format("\r\nArray of Example: {0}\n", t);

      // Create a Type object that represents a two-dimensional
      // array of Example objects.
      t = typeof(Example).MakeArrayType(2);
      outputBlock.Text += String.Format("\r\nTwo-dimensional array of Example: {0}\n", t);

      // Demonstrate an exception when an invalid array rank is
      // specified.
      try
      {
         t = typeof(Example).MakeArrayType(-1);
      }
      catch (Exception ex)
      {
         outputBlock.Text += String.Format("\r\n{0}\n", ex);
      }

      // Create a Type object that represents a ByRef parameter
      // of type Example.
      t = typeof(Example).MakeByRefType();
      outputBlock.Text += String.Format("\r\nByRef Example: {0}\n", t);

      // Get a Type object representing the Example class, a
      // MethodInfo representing the "Test" method, a ParameterInfo
      // representing the parameter of type Example, and finally
      // a Type object representing the type of this ByRef parameter.
      // Compare this Type object with the Type object created using
      // MakeByRefType.
      Type t2 = typeof(Example);
      MethodInfo mi = t2.GetMethod("Test");
      ParameterInfo pi = mi.GetParameters()[0];
      Type pt = pi.ParameterType;
      outputBlock.Text += String.Format("Are the ByRef types equal? {0}\n", (t == pt));

      // Create a Type object that represents a pointer to an
      // Example object.
      t = typeof(Example).MakePointerType();
      outputBlock.Text += String.Format("\r\nPointer to Example: {0}\n", t);
   }

   // A sample method with a ByRef parameter.
   //
   public void Test(ref Example e)
   {
   }
}

/* This example produces output similar to the following:

Array of Example: Example[]

Two-dimensional array of Example: Example[,]

System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.RuntimeType.MakeArrayType(Int32 rank) in c:\vbl\ndp\clr\src\BCL\System\RtType.cs:line 2999
   at Example.Demo(TextBlock outputBlock)

ByRef Example: Example&
Are the ByRef types equal? True

Pointer to Example: Example*

 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: