2011-08-26 7 views
17

これらの2つの方法の違いは何ですか?array.GetLength(0)とarray.GetUpperBound(0)の相違点

int[,] array = new int[4,3]; 
int length0 = array.GetLength(0); 
int upperbound0 = array.GetUpperBound(0); 

MSDNはGETLENGTHがGetUpperBoundが最大のインデックスを決定するよう要素の数を返すことを言いますが、配列は、各インデックスの要素で初期化されているので、これはどのように違うだろうか?

+4

下限は常にゼロ。そうではない。 –

答えて

31

この(ほとんど使用されない)方法を見てみましょう。 MSDNから:

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)

は、指定された下限と、指定されたタイプおよび寸法の長さの多次元配列を作成します。

-5 ... +5のインデックスを持つ配列を作成できます。この種の配列を使用した場合、GetUpperBound()が突然GetLength()-1よりずっと便利になります。 GetLowerBound()もあります。

しかし、この種の配列のC#サポートは低いので、これらのメソッドはArray.GetValue()/ SetValue()メソッドと組み合わせて使用​​するだけで済みます。

+1

"しかし、しないでください。"なぜあなたの配列の境界について確信が持てばいいのですか? – Epiplon

+2

私は境界についてはっきりしていないときにしか使用しません。 –

7

Array.Lengthは、必要な配列の長さ(要素数)を返します。 は、UpperBoundを取得するために1を引きます。

Array.GetUpperBound(0)は配列の上限を返します。 をそのまま使用できます。

2

GetUpperBoundは配列の中で最も高いインデックスを返します。GetLengthは配列の要素数を返します。

すなわちGetUpperBound = GETLENGTH - 1

+3

通常。しかし、それが提供されている理由ではありません。 –

+0

あなたの答えに+1、あなたは0以外のインデックスで配列を開始することができるか分からなかった! –

1

通常、array.GetUpperBound(0) = array.Length - 1ですが、常にゼロではない非ゼロの下限を持つ配列を作成できるため、

0

あなたの配列の下限が0の場合、混乱することなくどちらかを使用できますが、広く使用されているので、array.length-1をお勧めします。ただし、配列の下限が0より小さい場合、array.GetUpperBound(0)を使用する必要があります。この場合array.length-1!= array.getUpperBound(0)

関連する問題