【发布时间】:2022-06-16 09:56:01
【问题描述】:
我在这里有以下代码,我知道这不会编译,因为我试图将 ref 修饰符与 params 修饰符一起使用:
public static int[] Findfactors(ref params int[] pro) {
int[] hjk = { 88, 99 };
pro = hjk;
return pro;
}
我只是想让“pro”指向“hjk”,但我做不到。 为什么 C# 不允许我们这样做?为什么我不能将 ref 或 out 与参数一起使用?
我的最佳猜测如下:
params 有一个属性,它允许您不将任何参数传递给具有 params 修饰符等的参数,
以这种情况为例,如果我不将任何参数传递给“pro”,然后尝试让 pro 指向“hjk”,那么我实际上会让“Nothing”指向显然没有任何意义的东西.
【问题讨论】:
-
params是一个仅输入的概念。ref可能会修改调用者从未见过的临时局部变量(由编译器生成)。为什么要这样做? -
你的标题是“ref or out”,那么为什么不直接使用
out呢?您也不能将它与params一起使用,但您可以为其添加第二个参数。Findfactors(out int[] values, params int[] pro)。在这种情况下,我个人认为没有理由使用其中任何一个。我会摆脱ref并像你正在做的那样返回值。 -
params 背后的目的是允许您从调用函数传递任意数量的参数。如果您要传递一个整数数组,那么您不需要包含 params 标记。如果要修改现有的整数数组,请将其保留为 ref,否则在方法中创建一个新数组并使用 out 标记
-
您也不能重新分配 ref 值,函数会返回原始指针,并且您的重新分配会在函数内丢失
标签: c#