What is the best way to return two lists in C#?

c#, coding-style, list

Solution

First of all, that should probably be `out`, not `ref`.

Second, you can declare and return a type containing the two lists.

Third, you can declare a generic `Tuple` and return an instance of that:

class Tuple<T,U> {
   public Tuple(T first, U second) { 
       First = first;
       Second = second;
   }
   public T First { get; private set; }
   public U Second { get; private set; }
}

static class Tuple {
   // The following method is declared to take advantage of
   // compiler type inference features and let us not specify
   // the type parameters manually.
   public static Tuple<T,U> Create<T,U>(T first, U second) {
        return new Tuple<T,U>(first, second);
   }
}

return Tuple.Create(firstList, secondList);

You can extend this idea for different number of items.

Problem

I am almost embarrassed to ask this question, but as a long time C programmer I feel that perhaps I am not aware of the best way to do this in C#. I have a member function that I need to return two lists of a custom type (`List<MyType>`) and I know beforehand that I will always have a return value of only two of these lists. The obvious options are : ``` public List<List<MyType>> ReturnTwoLists(); ``` or ``` public void ReturnTwoLists(ref List<MyType> listOne, ref List<myType> listTwo); ``` Both seem to be non-optimal. Any suggestions on how to improve this? The first way doesn't make it clear in the syntax that only 2 lists are being returned, and the second uses references rather then a return value, which seem so non-c#.

Original source