C#中myArray.GetValue(2)和myArray [2]有什么区别?

时间:2017-04-14 14:31:25

标签: 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();
        }
    }
}

5 个答案:

答案 0 :(得分:2)

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,但不会对小代码段产生影响,但如果大规模使用,可能会影响性能。

答案 1 :(得分:1)

在您的代码中,没有区别。当您致电Array.GetValue(1)时,数组内部的主要区别是您正在接收该索引的值。您无法专门设置数组的值。

如果您要Array[1] = "...";,您已修改了阵列。但你也可以达到这个价值,虽然它可能没有上面那么富有表现力。因此,您可以使用此方法获取或设置值。

  

索引中的元素数量必须等于维度数量   在数组中。 indices数组中的所有元素必须集体   指定多维中所需元素的位置   阵列。 GetLowerBound和GetUpperBound方法可以确定   是否有任何索引超出范围。这个方法是O(1)   操作

两者都很容易做到以上情况。

答案 2 :(得分:1)

numbers.GetValue(3)返回一个对象,因此调用带有object参数的重载Console.WriteLine(object value)

numbers[3]的类型为int,然后Console.WriteLine(int value)会调用int作为参数。

所以你最终调用了不同的方法。

答案 3 :(得分:0)

在使用能力方面除了设定值之外没有区别。然而,差异似乎在于它如何获得价值。

数组.GetValue给了我this,它会返回一个对象。

任何一种方法都需要不到1毫秒,因此也没有明显的速度差异。

答案 4 :(得分:0)

当您使用Array类(带大写)时,没有索引器。因此,您可以使用GetValue()或SetValue()获取和设置元素的方式 请看这个链接:Using an array's SetValue method vs. the [] indexers