在代码dom中如何使用内置属性

时间:2009-04-10 05:36:50

标签: c# code-generation

CodeVariableDeclarationStatement hashTableParam = new CodeVariableDeclarationStatement();
hashTableParam.Name = "hastable";
hashTableParam.Type = new CodeTypeReference(typeof(System.Collections.Hashtable));

我在这里使用hashtable data type创建了code dom

现在我想使用其内置属性,例如addclear等。更清楚我想在代码dom中实现与此类似的代码。

ht.add("key","value");

我试着这样做

CodeVariableDeclarationStatement hashTableParam = new CodeVariableDeclarationStatement();
hashTableParam.Name = "hastable";
hashTableParam.Type = new CodeTypeReference(typeof(System.Collections.Hashtable));

CodeMethodInvokeExpression invokeExp2 = new CodeMethodInvokeExpression(new CodeVariableReferenceExpression(hashTableParam.Name), "add");
invokeExp2.Parameters.Add(new CodeArgumentReferenceExpression("key"));
invokeExp2.Parameters.Add(new CodeArgumentReferenceExpression("value"));
// CodeStatementCollection statements = new CodeStatementCollection();
return hashTableParam;

但我无法在invokeExp2hashtableparam之间建立链接。

在构建属性中是否有任何其他解决方案可用于我正在尝试使用它具有用户定义

1 个答案:

答案 0 :(得分:0)

您在那里获得的代码看起来像是在尝试传递传递给您正在构建的方法的参数的值add方法哈希表:

void GeneratedMethod( string key, string value )
{
    ...
    hashtable.add( key, value );
}

如果你试图传递实际的单词“key”和“value”,它看起来更像是这样:

invokeExp2.Parameters.Add( new CodePrimitiveExpression( "key" ) );
invokeExp2.Parameters.Add( new CodePrimitiveExpression( "value" ) );

您还设置了将hashTableParam变量本身视为一种方法。相反,您需要使用CodeMethodReferenceExpression

invokeExp2 = 
new CodeMethodInvokeExpression(
    new CodeMethodReferenceExpression( 
        new CodeVariableReferenceExpression( hashTableParam.Name ),
        "add" )        
)
相关问题