在C#中返回两个列表

时间:2017-04-18 11:19:39

标签: c# return

我已经研究了一段时间了,我仍然不确定如何实现以及从单独的方法返回两个列表的最佳方法是什么?

我知道周围有类似的问题,但他们似乎互相矛盾,哪种方式最好。 我只需要简单有效地解决我的问题。 提前谢谢。

6 个答案:

答案 0 :(得分:19)

有很多方法。

  1. 返回列表的集合。除非您不知道列表的数量或者是否超过2-3个列表,否则这不是一种很好的方式。

    public static IEnumerable<List<int>> Method2(int[] array, int number)
    {
        return new List<List<int>> { list1, list2 };
    }
    
  2. 创建一个包含列表属性的对象并将其返回:

    public class YourType
    {
        public List<int> Prop1 { get; set; }
        public List<int> Prop2 { get; set; }
    }
    
    public static YourType Method2(int[] array, int number)
    {
        return new YourType { Prop1 = list1, Prop2 = list2 };
    }
    
  3. 返回两个列表的元组 - 使用时特别方便 C#7.0元组

    public static (List<int>list1, List<int> list2) Method2(int[] array, int number) 
    {
        return (new List<int>(), new List<int>());
    }
    
    var (l1, l2) = Method2(arr,num);
    

    C#7.0之前的元组:

    public static Tuple<List<int>, List<int>> Method2(int[] array, int number)
    {
        return Tuple.Create(list1, list2); 
    }
    //usage
    var tuple = Method2(arr,num);
    var firstList = tuple.Item1;
    var secondList = tuple.Item2;
    
  4. 我会选择2或3选项,具​​体取决于编码风格以及此代码在更大范围内的适用范围。在C#7.0之前,我可能会建议选项2。

答案 1 :(得分:2)

方法1

public static void Method2(int[] array, out List<int> list1, out List<int> list2, int number)
{
    list1= new List<int>();
    list2= new List<int>();
    ...
}

方法2

public static Tuple<List<int>, List<int>> Method2(int[] array, int number)
{
    list1= new List<int>();
    list2= new List<int>();
    ...

    return Tuple.Create(list1, list2)
}

方法3

创建一个具有2个道具list1,列表2,返回该类或只返回列表数组的类

最后在C#7上你可以做到

public static (List<int> list1, List<int> list2) Method2(int[] array, int number)
{
    ...
    return (list1, list2)
}

答案 2 :(得分:2)

如果您使用的是更高版本的.NET和C#,那么只需使用元组(您可能需要安装 - 软件包&#34; System.ValueTuple&#34;)

public static void Method1()
{
    int[] array1 = { };
    int number1 = 1;
    (List<int> listA, List<int> listB) = Method2(array1, number1);
}

public static (List<int>, List<int>) Method2(int[] array, int number)
{
    List<int> list1 = new List<int>();
    List<int> list2 = new List<int>();

    return (list1, list2); //<--This is where i need to return the second list
}

答案 3 :(得分:1)

您应该将所需的列表作为对调用函数的引用传递。 例如

public static void Method1()
{
    List<int> listA, listB;
    Method2(array1, number1, ref listA, ref listB);
}

public static void Method2(int[] array, int number, ref List<int> listA, ref List<int> listB)
{
    //...do stuff here
    listA.Add(array[value]);
    listB.Add(array[value]);
}

答案 4 :(得分:1)

你可以看看将你的回归结构化为Two Dimensional Array。 这基本上是一个列表列表,可以显示为一个图形,其中每个坐标都是一个坐标。包含一个值。

这是一个创建二维数组的示例,向point [0,2]添加一个值,然后从该点获取其值并将其写入屏幕:

double[,] myNumbers = new double[4, 3];
myNumbers[0, 2] = 21.2;
Console.WriteLine(myNumbers[0,2]);

输出:21.2

答案 5 :(得分:1)

更好的做法IMO会将两个列表传递给您想要的方法,并在方法本身内初始化/分配它们。 例如:

public static void Method2(int[] arr, List<int> list1, List<int> list2)
{
    list1 = arr.OfType<int>().ToList();
    list2 = arr.OfType<int>().ToList();
}