使用codedom以c#编程生成代码

时间:2009-04-09 09:44:57

标签: c# codedom

我想生成用于创建哈希表对象的代码,并为其分配密钥和值编程。它应该类似于

Hashtable ht = new Hashtable();

ht.Add( "key1", "value1" );
ht.Add( "key2", "value2" );
ht.Add( "key3", "value3" );

例如

CodeMemberMethod testMethod = new CodeMemberMethod();

        testMethod.Name = "Test" + mi.Name + "_" + intTestCaseCnt;
        testMethod.Attributes = MemberAttributes.Public;.....

这里它创建了一个方法programacticaly现在我想创建一个哈希表,所以我问怎么样?

4 个答案:

答案 0 :(得分:5)

对于代码生成,请考虑Text Template Transformation Toolkit(T4)

此模板......

Hashtable ht = new Hashtable();
<#
    foreach (var obj in DataSource)
    {
#>
ht.Add( "<#= obj.Key #>", "<#= obj.Value #>" );
<#
    }
#>

...会生成此输出......

Hashtable ht = new Hashtable();
ht.Add( "key1", "value1" );
ht.Add( "key2", "value2" );
ht.Add( "key3", "value3" );
...
ht.Add( "keyN", "valueN" );

其中N是数据源中的记录数。

最好的是,这是内置于Visual Studio 2008

我有很好的经历

答案 1 :(得分:1)

你被困在哪里?您知道如何创建CodeMemberMethod,因此您应该能够将语句对象添加到CodeMemberMethod.Statements集合中。你需要一个声明用于变量声明,一个用于赋值/初始化,一个用于每个“Add”-Call。

BTW:我过去曾使用过Code DOM,但发现使用模板引擎直接生成代码的效果较差,使代码更具可读性。我通常使用StringTemplate,我对它非常满意。

答案 2 :(得分:1)

CodeParameterDeclarationExpression hashTableParam =new CodeParameterDeclarationExpression();
hashTableParam.Name = "hastable";

hashTableParam.Type = new CodeTypeReference(typeof(System.Collections.Hashtable));

我正在寻找感谢您的努力

答案 3 :(得分:0)

我知道的两个代码生成器是......

Codesmith at ... main sitefree version

斯科特汉塞尔曼的T4有关于它的博客文章here