-1

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

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;.....

在这里它以编程方式创建一个方法现在我想创建一个哈希表所以我问如何?

4

4 回答 4

5

对于代码生成,请考虑文本模板转换工具包(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

我有很好的经验

于 2009-04-09T09:55:53.573 回答
1

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

顺便说一句:我过去使用过 Code DOM,但发现直接使用模板引擎生成代码的工作量更少,并且使代码更具可读性。我通常使用StringTemplate,对此我很满意。

于 2009-04-09T10:52:05.170 回答
1
CodeParameterDeclarationExpression hashTableParam =new CodeParameterDeclarationExpression();
hashTableParam.Name = "hastable";

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

这就是我正在寻找的感谢您的努力

于 2009-04-09T12:42:36.590 回答
0

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

Codesmith 在 ...主站点,有免费版本

Scott Hanselman 的 T4 在这里有一篇关于它的博客文章

于 2009-04-09T09:58:31.287 回答