在StackExchange上,有几个与此类似的问题,但它们涵盖的情况并不完全相同。在将其标记为重复项之前,请通读它!

在C#中使用CodeDom,我正在尝试为字典生成一个Init表达式。
例如

Dictionary<int,string> dict = new Dictionary<int,string>{
    {1,"one"},
    {2,"two"}
};


我发现其他使用CodeExpression实例化对象的解决方案,然后使用几个CodeStatement实例化实例,但是由于一堆无聊的原因,我宁愿不下来。

需要说明的是,由于我不能使用多个CodeStatements,因此我有点需要避免生成以下内容:

Dictionary<int,string> dict = new Dictionary<int,string>();
dict.Add(1,"one");
dict.Add(2,"two");


我的问题是:是否有一种仅使用CodeDom.CodeExpression(s)生成此类代码的方法?

我很确定,在这一点上答案是“不。”,但我认为值得以防万一。

最佳答案

据我所知,您无法在CodeDOM对象模型中表达集合初始化器。但是有一种解决方法:CodeSnippetExpression。使用它,您可以创建一个直接包含所需C#表达式的字符串,并在另一个CodeDOM对象中使用它。

您可能可以使用CodeDOM对象模型和GenerateCodeFromExpression()来获取所需的代码部分(但您肯定需要自己组合这些部分)。

09-26 11:36