我在setValues()函数中覆盖变量'arr [1]'和'test'。
arr [1]更改为“BBB”
但测试不会更改为'222'
输出:BBB111
但它应该是BBB222
为什么字符串测试没有更新?
public class Program
{
static void Main(string[] args)
{
string[] arr = new string[10];
arr[1] = "AAA";
string test = "111";
setValues(arr, test);
int exit = -1;
while (exit < 0)
{
for (int i = 0; i < arr.Length; i++)
{
if (!String.IsNullOrEmpty(arr[i]))
{
Console.WriteLine(arr[i] + test);
}
}
}
}
private static void setValues(string[] arr, string test)
{
arr[1] = "BBB";
test = "222";
}
}
答案 0 :(得分:5)
您需要通过引用传递该字符串才能在方法中修改它,您可以通过添加ref
关键字来执行此操作:
public class Program
{
static void Main(string[] args)
{
string[] arr = new string[10];
arr[1] = "AAA";
string test = "111";
setValues(arr, ref test);
int exit = -1;
while (exit < 0)
{
for (int i = 0; i < arr.Length; i++)
{
if (!String.IsNullOrEmpty(arr[i]))
{
Console.WriteLine(arr[i] + test);
}
}
}
}
private static void setValues(string[] arr, ref string test)
{
arr[1] = "BBB";
test = "222";
}
}
答案 1 :(得分:2)
您只是在test
功能中更改setValues
的本地引用。您需要通过引用(ref
)
private static void setValues(string[] arr, ref string test)
{
arr[1] = "BBB";
test = "222";
}
然后这样称呼:
setValues(arr, ref test);
答案 2 :(得分:0)
这是因为test
方法中的setValues
参数未标记为ref
,因此仅在方法内部进行更改,且值不会超出范围。< / p>
答案 3 :(得分:0)
因为作为对象的数组是通过引用传递的,而字符串是通过值传递的。 因此,函数setValues()更新测试的本地副本,对调用者不可见,同时更新string [] arr的ONLY实例,对调用者而不是对被调用者可见。
保
答案 4 :(得分:0)
原因是可变范围。 SetValues()方法中引用的变量与Main中引用的变量不同。 根据课程的需要,有两种方法可以解决这个问题:
public class Program { static string[] arr = new string[10]; static string test = "111"; static void Main(string[] args) { arr[1] = "AAA";
SetValues(arr, ref test);
然后通过引用调用它:
Activator.CreateInstance(Type)