类型化字典类型的 CodeDom InitExpression

CodeDom InitExpression for Typed Dictionary type

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

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

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

我找到了其他解决方案,这些解决方案使用 CodeExpression 来实例化对象,然后使用几个 CodeStatements 来填充实例,但是由于一堆无聊的原因,我不想走这条路。

为了澄清,因为我不能使用多个代码语句,所以我有点需要避免生成这样的东西:

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

我的问题是: 有没有办法只使用 CodeDom.CodeExpression(s) 来生成这样的代码?

我很确定此时答案是 "no.",但我认为为了以防万一还是值得一问。

不,如果您想使用集合初始值设定项,则需要使用 LINQ 表达式而不是 CodeDOM,例如System.Linq.Expressions.ListInitExpression.

据我所知,您无法在 CodeDOM 对象模型中表达集合初始值设定项。但是有一种方法可以解决这个问题:CodeSnippetExpression。使用它,您可以创建一个直接包含您想要的任何 C# 表达式的字符串,并在另一个 CodeDOM 对象中使用它。

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