我有一个带字符串数组参数的方法。当在函数中我用另一个数组覆盖它时它不会在它之外改变(如果我理解正确的数组是通过引用传递的)。
我有一个看起来像这样的方法:
static void Method(string word, string[] tab)
{
string [] tab1;
[..]
tab = tab1; // tab changes to tab1
}
static void Main(string[] args)
{
string[] tab = { "", "", "", "", "", "", "", "", "", "" };
Method("443", tab);
//and here tab does not change like I though it would.
}
答案 0 :(得分:2)
更好的设计是:
static string[] Method(string word, string[] tab)
{
string [] tab1;
[..]
return tab1;
}
static void Main(string[] args)
{
string[] tab = { "", "", "", "", "", "", "", "", "", "" };
tab = Method("443", tab);
}
答案 1 :(得分:1)
您需要通过引用传递它:
static void Method(string word, ref string[] tab)
{
string [] tab1;
[..]
tab = tab1; // tab changes to tab1
}
static void Main(string[] args)
{
string[] tab = { "", "", "", "", "", "", "", "", "", "" };
Method("443", ref tab);
//and here tab does not change like I though it would.
}
说明:是数组是引用对象,但是默认值传递了此引用,因此您可以将其内容更改为更高范围。但参数(tab)仅保存此引用的副本,因为此引用按值传递。如果您想直接修改传递的参数引用以引用其他对象,则需要使用ref
关键字。
如果您想避免使用ref
关键字,则需要返回新数组,并在Main
方法中使用它。
static string[] Method(string word, string[] tab)
{
string [] tab1;
[..]
return tab1;
}
static void Main(string[] args)
{
string[] tab = { "", "", "", "", "", "", "", "", "", "" };
tab = Method("443",
}