3

Is there a way to generate a dictionary initializer using the C# CodeDom? Are those supported at all?

I would like to have:

private IDictionary<string, string> map = new Dictionary<string, string>
{
    { "Name", "Value" },
    ...
};
Igal Tabachnik
  • 31,174
  • 15
  • 92
  • 157

2 Answers2

5

This is not possible using the CodeDom constructs. They were not updated for collection initializers.

LukeH has an excellent blog post on the subject of 3.5 features and the CodeDom

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
JaredPar
  • 733,204
  • 149
  • 1,241
  • 1,454
  • Was afraid that's the case... Thanks anyway! – Igal Tabachnik Jun 15 '10 at 20:18
  • The blog post linked above explains that CodeDom was not updated for the "new" C# 3.0 features and gives an example of using `CSharpCodeProvider.CompileAssemblyFromSource` to compile a string of code containing a LINQ expression. – foson Dec 04 '20 at 17:00
1

You can do it but its possibly the worst nightmare ever.. Here is how I am doing it currently. (Updated my answer to reflect the question)

var constructDictionary = new CodeMemberField("Dictionary<string, string> map", @" = new Dictionary<string, string>()
{
   { Name, Value },
}");

This can also be populated once again its hackish.

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+" }");
Levon Ravel
  • 90
  • 1
  • 10