Часто требуется возвращать из функции два/более значений.
Обычно это решается с помощью написания проксикласса под каждый конкретный кейс. Но со временем их количество накапливается и "именовать эти классы становится труднее"/"их имена становятся нечитабельными". Например такой прокси:
public class CookieContainerStringProxy
{
public CookieContainer CookieContainer { get; set; }
public String String { get; set; }
}
Имя трудно назвать хорошим, но как его назвать иначе непонятно. Можно использовать имена типа Proxy8442 (возможно так и буду делать). В идеале, имя должно быть Proxy, но тут неизбежны коллизии. Если этот класс вынести вместе с использующим кодом в отдельный неймспейс, то всё хорошо, до тех пор пока не потребуется ещё один такой класс. И плодить неймспейсы ради проксей выглядит совсем глупо.
Можно использовать таплы, но в таком случае убивается читабельность:
proxy.CookieContainer против tuple.Item1
Поэтому таплы (лично в моём случае) отпадают.
Можно использовать враппер типа:
public class Wrapper<T, Y>
{
public T Tprop { get; set; }
public Y Yprop { get; set; }
}
Но при использовании его, те же проблемы что и у таплов:
proxy.CookieContainer против wrapper.Tprop
Поэтому тоже не вариант.
Анонимные типы использовать нельзя, поскольку их нельзя описать в сигнатурах методов. Возвращенные значения потом нужно обрабатывать, а как это сделать (без хаков) в случае анонимных типов не понятно.
Наверное есть варианты с кодогенерацией или с динамикой. Интересны любые варианты/мысли/пожелания.