в коде DOM, как использовать встроенные свойства - PullRequest
0 голосов
/ 10 апреля 2009
CodeVariableDeclarationStatement hashTableParam = new CodeVariableDeclarationStatement();
hashTableParam.Name = "hastable";
hashTableParam.Type = new CodeTypeReference(typeof(System.Collections.Hashtable));

Здесь я создал hashtable data type, используя code dom.

Теперь я хочу использовать встроенные свойства, такие как add, clear и т.д. для меня. Более ясно, что я хочу реализовать код, подобный этому, в коде 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;

но я не могу установить связь между invokeExp2 и hashtableparam.

Есть ли какое-либо другое решение для использования во встроенных свойствах, здесь я пытаюсь использовать это, определенное пользователем

1 Ответ

0 голосов
/ 10 апреля 2009

Код, который вы получили, выглядит так, как будто вы пытаетесь передать значения аргументов key и value , передаваемых в создаваемый вами метод, добавить метод хеш:

void GeneratedMethod( string key, string value )
{
    ...
    hashtable.add( 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" )        
)
...