在函数中接收数组

时间:2016-06-30 11:55:00

标签: c# arrays function

 public static void Main()
    {// do something here
    String[] array1d = { "zero", "one", "two", "three" };
        ShowArrayInfo(array1d);
        PrintValues(array1d);
     //do something here
    }
 public static void ShowArrayInfo(Array arr)
    {//do something here}
 public static void PrintValues( string[] myArr )
    {//do something here}      

在上面的代码中有两个不同的函数叫做
1. ShowArrayInfo
2. PrintValues
但是在两个函数中收集数组的方式是不同的。一个是Array arr,另一个是int[] myArr

这两种收集数组的方法有什么区别,arrmyArr是一样的吗? arrmyArr引用原始数组:array1d?我们可以在myArr上执行与我们在arr上执行的操作相同的操作吗?

3 个答案:

答案 0 :(得分:1)

数组为Reference types,如果更改函数内部数组中的元素,则会在调用者中反映出来。

Array就像一个更通用的类来处理数组。查看下面的例子。

使用Array课程,arr.GetValue(0)返回object而不是int

static void ChangeFirstItemToTen(int[] arr)
{
    arr[0] = 10;
}

static void ChangeFirstItemToTen(Array arr)
{
    arr.SetValue(10, 0);
}

static void Main(string[] args)
{
    int[] values = new int[] { 5, 6, 7, 8 };
    ChangeFirstItemToTen(values);
    Console.WriteLine(values[0]); // prints 10;
}

答案 1 :(得分:0)

Per the documentationArray是CLR中所有数组的基类。

您还可以从文档中看到基类上可用的方法和属性要少得多。您使用Array而不是T[]({1}}引用数组的原因并不多。

在您的示例中,int[]arr都引用了与myArr相同的数组。主要区别在于您可以使用的方法和属性(尽管您可以轻松地从一个转换为另一个)。

答案 2 :(得分:0)

Array是C#中所有数组的基类。您定义的两个方法的唯一区别是,只接受任何类型的数组和其他类型的int。两者都将通过价值传递'技术。
您可以使用'通过引用传递'使用answer关键字。