将空数组/多个整数传递给函数并返回它们

时间:2014-12-02 22:26:44

标签: c# arrays

假设我有数组(数组[20]),我想将它传递给函数,该函数将用随机数填充并返回它。

如何将空数组传递给函数,如何在函数完成后返回它?

另外,假设我有3个不同的整数(int a = 3; int b = 2; int c = 5;)

如何将所有3个整数传递给函数并在函数完成后返回它们?

我刚刚开始学习函数,到目前为止我只知道如何传递2个不同的整数并返回一个。 我确切地知道要写入函数的内容,但我只是不知道如何传递变量/ empty数组。

3 个答案:

答案 0 :(得分:1)

数组是引用类型,因此您只需传递它并进行修改即可。更改(除了分配变量)将传播给调用者:

private void MyFunc(int[] array)
{
   //Some generation
   array[0] = 1; //Generated by fair dice roll
                 //Guaranteed to be random
}

对于整数,您需要实际传递ref以进行更改以返回调用者。您无法返回多个值,因此您要经过ref,将其作为Tuple返回,或者返回自定义类。根据您的经验水平,您可能需要ref选项:

private void MyFunc2(ref int i, ref int j, ref int k)
{
   i = 3;
   j = 4;
   k = 5;
}

MyFunc2(ref var1, ref var2, ref var3);

通常不这样做,所以请仔细考虑您的用例。

参考文档:MSDN

答案 1 :(得分:0)

我想知道你为什么要这样做,但无论如何......

How do I pass an empty array to function and how do I return it after function is done?

完成工作后,只需返回相同的参数:

int[] emptyArr = new int[20];
yourFunction(emptyArr);

int[] yourFunction(int[] arr) {

  //Do your work
  return arr; 
}

请注意,您甚至不需要return arr,也不会将该函数声明为int[],因为您对arr变量所做的任何操作都会影响emptyArr。这是一个参考。

在C#中有引用和值。 int[]是一个参考。看看:http://www.albahari.com/valuevsreftypes.aspx

How do I pass all 3 integers to function and return them after function is done?

void numbers( ref int a, ref int b, ref int c) { //do your thing here }

你不应该写ref int a, ref int b, ref int c,你将在某一天学习函数式编程中的副作用和应用程序状态。但无论如何,学习是可以的。

答案 2 :(得分:0)

数组将通过引用传递,因此您可以将其传入并填充并简单地返回。

要返回三个int值,您可以通过引用ref传递它们,或者您也可以设置一组整数来返回值,并将它们标记为out。使用out传递原始数据的值并强制您设置引用的返回整数的值。

    static void passInts(ref int a, ref int b, ref int c)
    {
        a = a + b;
        b = b + c;
        c = c + 2;
    }
    static void passInts(int a, int b, int c, out int a1, out int b1, out int c1)
    {
        a1 = a + b;
        b1 = b + c;
        c1 = c + 2;
    }


        int a = 1; 
        int b = 2; 
        int c= 3;
        Console.WriteLine(string.Format("a={0}, b={1}, c={2}", a, b, c));
        passInts(ref a, ref b, ref c);
        Console.WriteLine(string.Format("a={0}, b={1}, c={2}", a, b, c));
        int A,B,C;
        passInts(a, b, c, out A, out B, out C);
        Console.WriteLine(string.Format("a={0}, b={1}, c={2}", A,B,C));