我遇到了一些代码,我想知道这个方法中是否需要返回值。 该方法改变了一个二维双数组的某些值。
public double[,] startsimplex_werte(double[,]f)
{
double standardabstand_s = 1.0;
double[] vektor_e1 = newdouble[2]{1.0,0.0};
double[] vektor_e2 = newdouble[2]{0.0,1.0};
f[1,1]=f[0,1]+vektor_e1[0]*standardabstand_s;
f[1,2]=f[0,2];
f[2,1]=f[0,1];
f[2,2]=f[0,2]+vektor_e2[1]*standardabstand_s;
return f;
}
这是一个名为:
的二维数组double[,]f = new double[3,3];
然后在数组上使用该方法:
f = berechne.startsimplex_werte(f);
这种方法在detial中的作用并不重要。我的问题是:
是否需要通过在方法中写入“return f”来返回数组的值。 由于数组是引用类型,因此可以通过引用进行调用。所以该方法已经改变了数组的实际数据成员。我会写没有返回值的相同方法(void方法),只是调用方法而不将其分配给数组。通过参数传输数组非常重要。两个variantes会做同样的,或者我错了吗?
我希望有人可以告诉我我的建议是否属实。
答案 0 :(得分:3)
你是对的,你不需要返回数组。
您正在修改其内容。如果您要创建一个全新的实例,那么您必须使用ref
/ out
关键字返回它或传递数组。
答案 1 :(得分:3)
你是对的,在这种情况下,不需要返回f
,因为它总是与输入相同。
为什么会这样做有几个原因:
答案 2 :(得分:0)
问题是,虽然它是通过引用调用,但只有该引用的副本传递给您的方法而不是原始引用。
只要修改数组的内容,两个引用仍然指向同一个对象。但是如果在方法中分配一个新数组,则此更改不会影响方法之外的对象。
因此,一般情况下,如果要确保orginial对象反映更改或使用该方法的返回值,最好在方法中使用ref
关键字。
但在这种特殊情况下,您不需要返回值或关键字ref
。但同样,最好使用返回值或ref
,具体取决于您正在做什么。