假设我有数组(数组[20]),我想将它传递给函数,该函数将用随机数填充并返回它。
如何将空数组传递给函数,如何在函数完成后返回它?
另外,假设我有3个不同的整数(int a = 3; int b = 2; int c = 5;)
如何将所有3个整数传递给函数并在函数完成后返回它们?
我刚刚开始学习函数,到目前为止我只知道如何传递2个不同的整数并返回一个。 我确切地知道要写入函数的内容,但我只是不知道如何传递变量/ empty数组。
答案 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));