2017-04-14 109 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] = "...";你已經修改了該陣列。但你仍然可以獲得價值,雖然它可能不如上述那樣具有表現力。所以你可以用這種方法獲得或設置一個值。

索引中元素的數量必須等於數組中的維數 的數量。 indices數組中的所有元素必須統一指定多維 數組中所需元素的位置。 GetLowerBound和GetUpperBound方法可以確定 是否有任何索引超出範圍。此方法是O(1) 操作。

兩者都是易感雖然做了以上。

+0

謝謝回答:) –

相關問題