在StackExchange上有几个与此类似的问题,但它们并不涵盖完全相同的情况。请在将其标记为重复之前仔细阅读!
在C#中使用CodeDom,我试图为字典生成Init Expression。 例如
Dictionary<int,string> dict = new Dictionary<int,string>{
{1,"one"},
{2,"two"}
};
我找到了其他使用CodeExpression来实例化对象的解决方案,然后是几个填充实例的CodeStatements,但是由于一些无聊的原因导致我不想失败。
澄清一下,因为我不能使用多个CodeStatements,所以我需要避免生成这样的内容:
Dictionary<int,string> dict = new Dictionary<int,string>();
dict.Add(1,"one");
dict.Add(2,"two");
我的问题是: 有没有办法只使用CodeDom.CodeExpression生成这样的代码?
我很确定在这一点上答案是&#34;没有。&#34;,但我认为值得问一下以防万一。
答案 0 :(得分:1)
不,如果您想使用集合初始值设定项,则需要使用LINQ表达式而不是CodeDOM,例如: System.Linq.Expressions.ListInitExpression
。
答案 1 :(得分:1)
据我所知,您无法在CodeDOM对象模型中表达集合初始值设定项。但有一种解决方法:CodeSnippetExpression
。使用它,您可以创建一个直接包含所需C#表达式的字符串,并在另一个CodeDOM对象中使用它。
您可以使用CodeDOM对象模型和GenerateCodeFromExpression()
来获取所需的部分代码(但您肯定需要自己组合这些部分)。