我的问题与 C# 函数参数有关。我习惯了 C++,默认情况下参数是值,除非您明确指定它们作为引用。那么,在 C# 中,如何使函数参数按值而不是按引用传递?其实,我只是想知道如何传递一个变量,而不是在函数调用后修改那个变量。
例如:
void foo(Widget w)
{
w.X = 3;//where w wouldn't really be modified here
}
最佳答案
没有人提到 struct
是按值传递的:
struct Foo
{
public int X;
public override string ToString()
{
return "Foo.X == " + X.ToString();
}
}
class Program
{
static void ModifyFoo(Foo foo)
{
foo.X = 5;
System.Console.WriteLine(foo);
}
static void Main()
{
Foo foo = new Foo();
foo.X = 123;
ModifyFoo(foo);
System.Console.WriteLine(foo);
}
}
输出:
$ mono ./a.exe Foo.X == 5 Foo.X == 123
如果您对类型使用struct
,那么您只能在显式使用ref
或out 时修改实例
在你的方法中......但显然这只有在你可以控制所涉及的类型时才有效。
关于c# - 如何使 C# 函数参数充当值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3275504/