Получение анонимного типа от метода, знание его членов во время компиляции

Я знаю, что есть много вопросов об анонимных типах C#, но ни один из них не отвечает мне. Я также знаю, что вы можете возвращать анонимные типы, присваивая результат метода dynamic возражать или приводить его в соответствие с этой статьей Джона Скита, но в обоих случаях вам нужно знать, какие члены анонимного объекта, так почему бы нам не иметь своего рода ключевое слово с именем anonymous которые позволяют нам делать такие вещи:

anonymous F()
{
    ...
    return new { a = 5, b = "some string" };
}

а затем использовать его так:

anonymous a = F();

но иметь статическую типизацию? Я имею в виду, почему компилятор не может статически знать, какие члены анонимного объекта F метод возвращает, и поэтому дать мне intellisense?

1 ответ

Решение

Что бы вы остановили, чем делать что-то вроде этого:

anonymous F()
{
     if (something) return new { a = 5 };
     else return new { b = 1, z = "asdf" };
}

Как компилятор должен знать, какой тип возвращается тогда? Должно ли это ограничивать вас во время разработки сообщениями об ошибках, что эти анонимные типы не совпадают? Стоит ли усилий? Ты можешь использовать dynamic для таких случаев или создавать реальные классы, если это необходимо - чтобы сделать код понятным.

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