2017-04-14 4 views
0

myArray.GetValue(2)とmyArray [2]を使用する間に違いはありますか?例えばC#のmyArray.GetValue(2)とmyArray [2]の違いは何ですか?

namespace ConsoleApplication16 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] numbers = new int[] { 1, 2, 3, 4 }; 
      Console.WriteLine(numbers.GetValue(3)); 
      Console.WriteLine(numbers[3]); 
      Console.ReadLine(); 
     } 
    } 
} 
+2

あなたが書いたコードにはありません。非0ベースの配列やインデクサー(または配列)をサポートしない言語では便利です...) –

答えて

1

GetValueは型オブジェクトを返しますが、インデックスを使用すると配列固有の型が返されます。

このfiddle(下のコード)では、変数val1に文字列を格納できますが、val2は整数としてしか使用できません。

public static void Main() 
{ 
    int[] numbers = new int[]{1, 2, 3, 4}; 
    var val1 = numbers.GetValue(3); 
    var type = val1.GetType(); 
    var val2 = numbers[3]; 

    Console.WriteLine(type.ToString()); 
    val1 = "hello"; 
    type = val1.GetType(); 
    Console.WriteLine(type.ToString()); 
} 

これは、小さなコードスニペットに影響を与えませんが、大規模に使用される場合、それは潜在的にパフォーマンスに影響を与える可能性があり、boxing and unboxingになります。

+0

ありがとう、うまく説明しました:) –

0

は利用能の値を設定することを除いて差がありません。違いは、それがどのように価値を得るかにあるようだ。

アレイの.GetValueが私にthisを与えると、オブジェクトを返します。

いずれの方法も1ms未満であるため、速度差はほとんどありません。

1

コードには違いはありません。配列内の主な相違点は、Array.GetValue(1)に電話すると、そのインデックスの値を受け取ります。しかし、配列の値を特に設定することはできません。

Array[1] = "...";を行う場合は、配列を変更しました。しかし、あなたはまだ値を達成することはできますが、それは上記のように表現力がないかもしれません。だから、あなたはこのアプローチで価値を得るか、設定することができます。

インデックスの要素数は、配列の と同じでなければなりません。インデックス配列のすべての要素は、集合的に で、多次元 配列内の目的の要素の位置を指定する必要があります。 GetLowerBoundメソッドとGetUpperBoundメソッドは、いずれかのインデックスが範囲外であるかどうかを と判断できます。このメソッドはO(1) 操作です。

どちらも問題ありません。

+0

ありがとうございました:) –

1

numbers.GetValue(3)はオブジェクトを返し、パラメータをとるオーバーロードConsole.WriteLine(object value)が呼び出されます。

numbers[3]は、タイプがintであり、Console.WriteLine(int value)で、パラメータとしてintが呼び出されます。

これで、別のメソッドを呼び出すことになります。

+0

ありがとうございました。 –

0

Arrayクラス(大文字)を使用している場合、インデクサーはありません。したがって、GetValue()またはSetValue()を使用して要素を取得および設定する方法は、 を参照してください。Using an array's SetValue method vs. the [] indexers

関連する問題