2016-07-09 2 views
0

は私がタイプを使用して、配列の長さを決定する方法はあります。ここ

 int[] x = new int[10]; 

     Type type = x.GetType(); 
     if (type.IsArray) 
     { 
      Type typeOfElement = type.GetElementType(); 
      int length = 0; // how do I get array's length???? 
     } 

を持っているものである)メソッドGetType(後に配列のサイズを決定しますか?

+0

これはどの言語で書かれていますか? –

+0

私は鋭いと思うでしょう –

+0

あなたはType.GetProperty()を使う必要があります。まずRankプロパティを読み、配列の次元数を確認します。あなたが1に満足すれば、Lengthプロパティを読んでください。 –

答えて

1

配列のサイズに関する種類の情報はありません:あなたは、あなたのタイプは常に配列になりますと、彼らが持っているサイズかは重要ではありませんので、それを行うことはできません。それは単なる配列であり、それ以上はありません。

サイズを取得する唯一の方法はインスタンスに戻っています。 そこにはしか存在せず、配列のサイズを見つけることができます。

これは、反射を使用してLengthプロパティを照会することで可能です。

+0

ありがとう、あまりにも悪い:( – walruz

1

使用Array.Length

int[] x = new int[10]; 

Type type = x.GetType(); 
if (type.IsArray) 
{ 
    int length = (x as Array).Length; 
} 

編集:ちょうどあなたがインスタンスからタイプから長さを取得していないについて尋ねたことに気づきました。

int[] arr1 = new int[10]; 
int[] arr2 = new int[11]; 

bool areEqual = arr1.GetType() == arr2.GetType(); // true 
+0

最初の解釈では 'GetType()'は必要ありません。次のようにすることができます: 'var a = x as Array; if(a!= null){var length = a.Length;/* ... * /} ' –

0

リフレクションを使用すると、配列の長さを取得できません。オブジェクトのプロパティにアクセスし、そのオブジェクト(クラス)によって提供される型とメソッドを知ることができます。 しかし、配列の長さを知ることで、配列の長さを再現することはできません。

0

異なる長さの配列は、同じタイプ(実行時)を持つnew int[10]new int[11]のように同じ型を持ちます。

これは、System.Typeからの長さを再構築できないことを意味します。実際の配列インスタンスへの参照が必要です。

関連する問題