В C перечисления используются без префикса типа, поэтому вы пишете:
month[0] = January;
month[4] = May;
Перечисление Month и ShortMonth имеют одинаковую область видимости, поэтому компилятор не может знать, какой May использовать. Очевидным решением будет префикс перечислений, но я не уверен, что использование этих перечислений в этом случае оправдано.
Анонимные классы представляют собой синтаксический сахар C # (см. Раздел примечаний здесь ). csc.exe создает класс с частными полями и свойством чтения / записи с типом, выведенным из контекста.
Это означает, что вы не можете создать анонимный класс во время выполнения, потому что CLR видит их не иначе, чем любой другой класс (опять же, потому что это синтаксический сахар C #).
Вместо этого:
Dictionary
System.Reflection.Emit
для создания типа во время выполнения, но я не вижу в этом никакой реальной выгоды по сравнению с просто Dictionary <строка, object>
Меня также беспокоит то, что вы делаете, потому что это как строка, скорее всего, означает для меня, что вы принимаете какой-либо ввод пользователя. Будьте осторожны с проблемами безопасности во всем, что вы делаете.
Невозможно использовать анонимные типы, однако вы можете сделать это с помощью Reflection Emit, используя класс TypeBuilder, в частности TypeBuilder.Create (..).
http://msdn.microsoft. com / en-us / library / system.reflection.emit.typebuilder.createtype.aspx
Наилучший способ сделать это - использовать сериализацию. Но, конечно, здесь не используется тот же строковый формат, который вы описали.
Инициализатор вашего объекта не обязательно должен содержать постоянные значения.
string myName="bob";
int myAge=30;
double mySalary=100000;
object empData = new { name = myName, age = myAge, salary = mySalary };
Таким образом, в вашем сценарии вам придется анализировать отдельные элементы из вашей строки , и выполнить некоторые преобразования для них, чтобы привести их к нужным вам типам.
Если вы не связаны с этим конкретным строковым форматом, вы можете сериализовать и десериализовать свои объекты и сделать то же самое с помощью XML гораздо проще.
Я не думаю, что этот вопрос сам по себе отвечает на ваш вопрос, но он расскажет вам, почему невозможно создавать анонимные экземпляры объектов с использованием строк таким образом, как вы предлагаете:
Анонимные типы не имеют публичных полей, следовательно, хотя вы можете сделать это для именованного объекта, это не так просто сделать это для анонимного типа. Тем не менее, вам ничто не мешает [как предлагает BFree] использовать отражение для выдачи MSIL для анонимного типа - что не совсем просто, но и возможно.
Нет прямого простого способа сделать это. Обычно у вас есть следующие возможности:
На мой взгляд, ни один из них не идеален. Я бы рассмотрел QueryString как пары, XML или JSON или какой-либо другой формат, в котором есть доступные парсеры, если у вас есть возможность и подумайте о хранении данных в экземпляре словаря вместо создания объекта для каждого выражения.