我将变量保存到数据字符串中,然后尝试将这些字符串转换回如下所示的变量:
using System;
public class Program
{
static int pop;
static string[] log = new string[10];
public static void Main()
{
string abc = "5 6 10 345 23 45";
log = abc.Split(' ');
Conv(3,pop);
Console.WriteLine(pop); // expected result: pop == 345
}
static void Conv(int i, int load)
{
if (log[i] != null){ load = int.Parse(log[i]);}
}
}
Pop应该为345,但应返回0。使用时没有问题
pop = int.Parse.log[i]
答案 0 :(得分:4)
因为load
是通过 value 传递的,而不是通过 reference 传递的(意味着它已被复制)。使用ref
或out
关键字,或仅使用return
。
void Conv(int i, ref int load)
{...}
...
Conv(3,ref pop);
答案 1 :(得分:3)
尽管Michael的答案肯定是正确的,但获得您所期望的另一种方法是更改Conv
的实现以返回值,而不是使用按引用传递。
public static void Main()
{
string abc = "5 6 10 345 23 45";
log = abc.Split(' ');
int newPop = Conv(3,pop);
Console.WriteLine(newPop);
}
static int Conv(int i, int load)
{
if (log[i] != null)
{
return int.Parse(log[i]);
}
return load;
}
或稍作重构:
static int Conv(int i, int load)
{
string entry = log[i];
return entry == null
? load
: int.Parse(entry);
}