Это зависит от того, что вы собираетесь делать с долей возврата.
Если вы собираетесь привязать его в пользовательском интерфейсе, вы можете просто повторно запустить IEnumerable или IQueryable.
Если вы собираетесь использовать отражение в возвращаемом значении, просто верните объект типа
Если вы используете С # 4.0, вы можете вернуть динамический тип
Если вы используете EF или Linq to SQL для дальнейшего присоединения к запросу, состоящему из вашего анонимного типа, вы можете вместо этого создать конкретный класс и использовать технику конкретного заполнителя. Для получения более подробной информации об этой технике я могу оказать некоторую помощь.
Однако, как уже упоминали другие, вам действительно следует задаться вопросом, является ли возвращение анонимного типа из метода лучшим способом решения данной проблемы. В общем, обычно существует лучший подход, основанный на шаблонах, который может потребовать немного больше кода заранее, но может привести к более элегантному дизайну. При этом я считаю, что есть законные случаи, такие как привязка данных, когда возвращение экземпляров анонимного типа может быть вполне приемлемым.
ОБНОВЛЕНИЕ: просто интересный лакомый кусочек, которым я хотел бы поделиться на случай, если читающие не знают. Анонимные типы уникальны по их именам свойств и типам, поэтому допустим, что у вас есть метод A и метод B, в обоих случаях вы создаете анонимный тип, который имеет свойство типа одной строки с именем Name, выполняя что-то вроде кода be ниже.
public object A()
{
return new { Name = "Cid" }
}
public object B()
{
return new { Name = "Galuf" }
}
public void Test()
{
System.Diagnostics.Trace.Assert(A().GetType() == B().GetType());
}
Теперь, несмотря на то, что этот тип определен в двух разных местах, компилятор создает только один общий тип, потому что они оба имеют одинаковый набор свойств, как определено типами свойств и именами свойств. В этом отношении свойства можно рассматривать как своего рода сигнатуру анонимного типа. Используя эти знания, существуют различные методы, которые можно использовать для самоанализа в экземпляры анонимного типа, которые были преобразованы в объект или отложены с использованием ключевого слова dynamic. Есть также изящные способы работы с анонимными типами с помощью универсальных методов, точно так же, как Linq делает с методами в статических классах Enumerable и Queryable. Таким образом, вы можете делать такие вещи, как создание нового экземпляра любого анонимного типа без использования отражения. Уловка заключается в том, что вы должны использовать экземпляр анонимного типа для передачи методам, чтобы тип был выведен универсальным методом. Если кого-то интересуют эти темы, поскольку они применимы к исходному вопросу плаката, оставьте комментарий, и я могу попытаться прояснить некоторые из этих методов.
person
jpierson
schedule
03.07.2010