CodeDom и инициализаторы коллекции - PullRequest
3 голосов
/ 16 июня 2010

Есть ли способ создания инициализатора словаря с использованием C # CodeDom? Поддерживаются ли они вообще?

Хотелось бы иметь:

private IDictionary<string, string> map = new Dictionary<string, string>
{
    { "Name", "Value" },
    ...
};

Ответы [ 2 ]

5 голосов
/ 16 июня 2010

Это невозможно при использовании конструкций CodeDom.Они не были обновлены для инициализаторов коллекции.

У LukeH есть отличная запись в блоге на тему 3.5 функций и CodeDom

1 голос
/ 04 ноября 2018

Ты можешь сделать это, но это, возможно, худший кошмар за всю историю. Вот как я делаю это сейчас (Обновил мой ответ, чтобы отразить вопрос)

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+" }");
...