Динамический / анонимный тип, возвращающий анонимные типы!
Это не вопрос, так как я думаю, что это обсуждение, я знаю, что вы не можете вернуть анонимный тип через методы, когда я впервые использовал анонимные типы, я подумал, что было бы очень здорово иметь возможность возвращать его через методы и когда вышел.net 4 и с выпуском динамических типов, я думал, что есть надежда вернуть анонимный тип через динамический тип, например так:
public static dynamic getCustomer()
{
.....
var x = from c in customers
select new {Fname = c.FirstName};
return x;
}
а потом
static void Main(string[] args)
{
dynamic x = getCustomer();
Console.WriteLine(x.First().Fname);
Console.ReadKey();
}
но, к сожалению, это не работает, хотя он хорошо компилируется,
Я думаю, причина в том, что:
Анонимные типы известны в типе компиляции и должны быть заключены в классы KNOWN IN RUNTIME!, Теперь анонимный тип переносит их информацию во время компиляции, надеясь, что какой-то класс придет и примет эту информацию во время выполнения, но динамический тип неизвестен во время компиляции, поэтому Передавая анонимный тип через динамический тип, вынуждаете анонимный тип потерять его информацию / интеллект, я попытался отладить данные и мог получить нужные данные, но, думаю, он работает только в режиме отладки, или, может быть, я что-то упустил.
мне было интересно, если кто-нибудь заставил его работать или думал об этом?
1 ответ
Вы можете вернуть анонимный тип, вы просто не можете объявить, что сделаете это. Вы можете обойти это с ужасным взломом.
Причина, по которой ваш код не работает, не имеет ничего общего с анонимными типами - это связано с методами расширения, которых нет в динамической типизации.
Изменить на:
Console.WriteLine(Enumerable.First(x).Fname);
и я ожидаю, что это сработает.