Динамический / анонимный тип, возвращающий анонимные типы!

Это не вопрос, так как я думаю, что это обсуждение, я знаю, что вы не можете вернуть анонимный тип через методы, когда я впервые использовал анонимные типы, я подумал, что было бы очень здорово иметь возможность возвращать его через методы и когда вышел.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);

и я ожидаю, что это сработает.

Другие вопросы по тегам