我有2个函数,一个获取名称,另一个函数从名称列表中设置为Delete。没有compliation错误,但我的DeleteName不显示任何内容。原来这是一个简单的修复,我忽略了什么?
public static List<string> GetName(List<string> aString)
{
aString = new List<string>();
localList.Add("cat");
localList.Add("apple");
localList.Add("bass");
localList.Add("dog");
return aString;
}
public static List<string> DeleteName(List<string> aString)
{
aString = new List<string>();
GetName(aString);
foreach (string x in aString)
{
Console.WriteLine(x);
}
return aString;
}
答案 0 :(得分:5)
您已将aString
传递给GetName
但未对结果List
执行任何操作。 在GetName()
中似乎没有理由传递aString
,因为您将其设置为新实例。您也没有对{{1}做任何事情传递给aString
。如果你想将第一个集合与第二个集合合并,你可以尝试这样的事情:
DeleteName
答案 1 :(得分:4)
您传递List然后返回它似乎很奇怪。尝试将代码更改为:
public static List<string> GetName()
{
List<string> aString = new List<string>();
aString.Add("cat");
aString.Add("apple");
aString.Add("bass");
aString.Add("dog");
return aString;
}
public static List<string> DeleteName()
{
List<string> aString = GetName();
foreach (string x in aString)
{
Console.WriteLine(x);
}
return aString;
}
正如@hunter指出的那样,你可以在GetName
中没有声明你的清单的情况下这样做。代码:
public static void GetName(List<string> aString)
{
aString.Add("cat");
aString.Add("apple");
aString.Add("bass");
aString.Add("dog");
}
public static List<string> DeleteName()
{
List<string> aString = new List<string>();
GetName(aString);
foreach (string x in aString)
{
Console.WriteLine(x);
}
return aString;
}
此外,正如@Dustin Laine指出但随后删除了,如果您未将aString
设置为GetName()
中的新对象,则会得到相同的结果。代码:
public static List<string> GetName(List<string> aString)
{
//aString = new List<string>();
aString.Add("cat");
aString.Add("apple");
aString.Add("bass");
aString.Add("dog");
return aString;
}
public static List<string> DeleteName(List<string> aString)
{
aString = new List<string>();
GetName(aString);
foreach (string x in aString)
{
Console.WriteLine(x);
}
return aString;
}
这仍然是编写代码的一种非常奇怪的方式,我不推荐它。
答案 2 :(得分:3)
将其更改为
public static List<string> GetName(ref List<string> aString)
应该修复它。 aString
中的GetName
是指向DeleteName
中创建的列表的指针。在该方法的第3行,您将aString
设置为指向其他位置,然后使用该位置。然后你返回它,但不要使用它。这使得DeleteName
中创建的列表保持不变。您返回列表后的另一个可能的修复方法是将DeleteName
的调用更改为
aString = GetName(null);
但这也很奇怪,因为GetName
中的列表实际上从未使用过。
答案 3 :(得分:0)
您的意思是制作ref
参数吗?如果您不希望这样,那么它本身就是aString = GetName(aString)
而不是GetName(aString)
。
答案 4 :(得分:0)
因为你正在编写foreach结果。 你可能会这样做:
foreach(string x in aString)
{
astring.Add(x);
}
Console.WriteLine(aString);
// or
return aString;
答案 5 :(得分:0)
您没有存储String的结果。你应该做一些像String = GetName(String)。
但是这个代码在发布时还有很多其他问题。