从函数中检索参数

时间:2011-04-19 18:02:57

标签: c#

我有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;
    }

6 个答案:

答案 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)。

但是这个代码在发布时还有很多其他问题。