【问题标题】:What is the difference between myArray.GetValue(2) and myArray[2] in C#?C# 中的 myArray.GetValue(2) 和 myArray[2] 有什么区别?
【发布时间】:2017-04-14 14:31:24
【问题描述】:

使用 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();
        }
    }
}

【问题讨论】:

  • 不在您编写的代码中。它对于非基于 0 的数组和不支持索引器(或数组...)的语言很有用

标签: c#


【解决方案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,它不会对小代码sn-p产生影响,但如果大规模使用它可能会影响性能。

【讨论】:

  • 谢谢你,解释得很好:)
【解决方案2】:

在您的代码中,没有区别。主要区别在于,当您调用 Array.GetValue(1) 时,您将在数组内部接收该索引的值。但是,您不能专门设置数组的值。

如果您要执行Array[1] = "...";,您已经修改了数组。但是您仍然可以获得该值,尽管它可能不像上面那样具有表现力。因此,您可以使用这种方法获取或设置值。

索引中的元素数必须等于维数 在数组中。索引数组中的所有元素必须共同 指定所需元素在多维中的位置 大批。 GetLowerBound 和 GetUpperBound 方法可以确定 是否有任何索引超出范围。这种方法是 O(1) 操作。

尽管如此,两者都很容易受到影响。

【讨论】:

    【解决方案3】:

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

    numbers[3]int 类型,然后是 Console.WriteLine(int value),它以 int 作为参数被调用。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        这两种方法都需要不到 1 毫秒的时间,因此也没有明显的速度差异。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-18
          • 2012-02-13
          • 1970-01-01
          • 2010-10-25
          • 2013-01-27
          • 2019-04-28
          • 2022-08-20
          相关资源
          最近更新 更多