Каков наилучший способ вернуть два списка в C #?
================================================

Мне почти стыдно задавать этот вопрос, но, как программист C, я чувствую, что, возможно, я не знаю лучшего способа сделать это на C #.

У меня есть функция-член, мне нужно вернуть два списка пользовательского типа (`List<MyType>`) и я знаю заранее, что у меня всегда будет возвращаемое значение только двух из этих списков.

Очевидные варианты:

или же

Оба кажутся неоптимальными.

Любые предложения о том, как улучшить это?

Первый способ не дает понять в синтаксисе, что возвращаются только 2 списка, а второй использует ссылки, а не возвращаемое значение, которое кажется не таким как c #.

Прежде всего, это должно быть`out`не`ref`.

Во-вторых, вы можете объявить и вернуть тип, содержащий два списка.

В-третьих, вы можете объявить общий`Tuple` и вернуть экземпляр этого:

Вы можете распространить эту идею на разное количество предметов.





Создать простую структуру, которая содержит и то, и другое, и вернуть это как вывод функции?



Ваше первое предложение не состоит из двух списков. Это список списков.

Второй вариант будет делать то, что вы намереваетесь, но вы, возможно, захотите изменить его на использование ключевого слова out вместо ref, чтобы вызывающие стороны вашего метода знали намерение того, что вы делаете.



У вас есть несколько вариантов:

используйте пару, если списки не имеют смысла по порядку:

Ты можешь использоватьout или жеref параметры, как вы упомянули. Это хороший вариант, если один список более значим, чем другой.

Вы можете использовать словарь, если клиент знает ключи или хочет выполнить их поиск:

Или самый «правильный» Решением для полноты и согласованности на мой взгляд было бы создание простого класса контейнера данных для хранения двух списков. Это дает потребителю строго типизированные, хорошо статически скомпилированные (читай: intellisense-enabled) возвращаемые значения для работы. Класс может быть вложен прямо рядом с методом.