программная генерация кода в c # с использованием codedom - PullRequest
0 голосов
/ 09 апреля 2009

Я хочу сгенерировать код для создания объекта хеш-таблицы и присвоения ему ключа и значения программно. должно быть похоже на

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 ]

5 голосов
/ 09 апреля 2009

Для генерации кода рассмотрим Набор инструментов преобразования текстовых шаблонов (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 голос
/ 09 апреля 2009
CodeParameterDeclarationExpression hashTableParam =new CodeParameterDeclarationExpression();
hashTableParam.Name = "hastable";

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

это то, что я искал, спасибо за твои усилия

1 голос
/ 09 апреля 2009

Где вы застряли? Вы знаете, как создать CodeMemberMethod, поэтому вы должны иметь возможность добавлять объекты операторов в коллекцию CodeMemberMethod.Statements. Вам понадобится один оператор для объявления переменной, один для присваивания / инициализации и один для каждого «Add» -Call.

Кстати: я использовал Code DOM в прошлом, но обнаружил, что генерация кода напрямую с помощью движка шаблонов менее эффективна и делает код гораздо более читабельным. Я обычно использую StringTemplate , и я очень доволен этим.

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

Два генератора кода, о которых я знаю, это ...

Codesmith at ... основной сайт , с бесплатной версией

T4, который находится в Скотте Хансельмане, имеет сообщение в блоге об этом здесь

...