2017-04-14 110 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

谢谢回答:) –

相关问题