使用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 :(得分: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)
答案 4 :(得分:0)
当您使用Array类(带大写)时,没有索引器。因此,您可以使用GetValue()或SetValue()获取和设置元素的方式 请看这个链接:Using an array's SetValue method vs. the [] indexers