Есть ли способ создать инициализатор словаря с помощью C# CodeDom? Они вообще поддерживаются?
Я бы хотел:
private IDictionary<string, string> map = new Dictionary<string, string>
{
{ "Name", "Value" },
...
};
Есть ли способ создать инициализатор словаря с помощью C# CodeDom? Они вообще поддерживаются?
Я бы хотел:
private IDictionary<string, string> map = new Dictionary<string, string>
{
{ "Name", "Value" },
...
};
Это невозможно при использовании конструкций CodeDom. Они не были обновлены для инициализаторов коллекций.
У LukeH есть отличный пост в блоге на тему возможностей 3.5 и CodeDom.
CSharpCodeProvider.CompileAssemblyFromSource
для компиляции строки кода, содержащей выражение LINQ.
- person foson; 04.12.2020
Вы можете это сделать, но это, возможно, самый страшный кошмар на свете. Вот как я это делаю сейчас. (Обновлен мой ответ, чтобы отразить вопрос)
var constructDictionary = new CodeMemberField("Dictionary<string, string> map", @" = new Dictionary<string, string>()
{
{ Name, Value },
}");
Это также может быть заполнено еще раз хакерским.
string builder += " = new Dictionary<string, string>(){";
for(int i = 0; i < 10; i++)
{
builder+="{ Name"+i+", Value"+i+" }";
}
var constructDictionary = new CodeMemberField("Dictionary<string, string> map", builder+" }");