将i
传递给方法时,为什么i
没有改变?方法调用后0
的值为101
,但该方法仍返回class Program
{
static void Main(string[] args)
{
int i = 0;
Console.WriteLine("Before static method running i={0}", i);
int c= SampleClass.ExampleMethod( i);
Console.WriteLine("i={0} - Static method return c={1}",i,c);
}
}
class SampleClass
{
public static int ExampleMethod(int i)
{
i= 101;
Console.WriteLine("Inside static method i={0}",i);
return i;
}
}
。
{{1}}
答案 0 :(得分:5)
在C#中,值类型(int
s,double
等等按值传递,不引用。)
要修改i
的值,您必须使用ref
关键字。
class Program
{
static void Main(string[] args)
{
int i = 0;
int c= SampleClass.ExampleMethod(ref i);
Console.WriteLine("i={0} - c={1}",i,c);
}
}
class SampleClass
{
public static int ExampleMethod(ref int i)
{
i = 101;
return i;
}
}
通常,最好不要使用ref
,而是返回单个值。虽然在这种情况下你的意图并不清楚,但那么有效的方法。
答案 1 :(得分:3)
简短的回答是......我并没有真正传递给你的班级功能。发送一份我的副本。您必须明确告诉C#在内存中发送实际值而不是副本。您可以使用“ref”关键字执行此操作。在这个例子中......我改变了......
class Program
{
static void Main(string[] args)
{
int i = 0;
int c = SampleClass.ExampleMethod(ref i); Console.WriteLine("i={0} - c={1}", i, c);
Console.ReadLine();
}
}
class SampleClass
{
public static int ExampleMethod( ref int i)
{
i = 101;
return i;
}
}