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#.