Как добавить частичный метод без использования реализации CodeDom

internal List<CodeMemberMethod> createEventHooks()
        {
            string[] eventNames = new string[] { "OnUpdate", "OnInsert", "OnDelete", "OnSelect", "OnSelectAll" };
            List<CodeMemberMethod> eventHooks = new List<CodeMemberMethod>();

            foreach (string eventName in eventNames)
            {
                CodeMemberMethod eventHook = new CodeMemberMethod();
                eventHook.Name = eventName;
                eventHook.Attributes = MemberAttributes.ScopeMask;
                eventHook.ReturnType = new CodeTypeReference("partial void");
            }
            return eventHooks;
        }

производит следующий код:

partial void OnUpdate() {
}

partial void OnInsert() {
}

partial void OnDelete() {
}

partial void OnSelect() {
}

partial void OnSelectAll() {
}

Как я могу заставить CodeDom отбрасывать"{}", который разрешит ошибку компилятора, которую я получаю попытку скомпилировать? Я думал о просто использовании a CodeSnippetStatement (который я не сделал бы, так как это побеждает цель использовать CodeDom во-первых), но я не могу найти место в CodeTypeDeclaration класс для добавления отрывков.

Так: Я должен также

  1. Добавьте метод реализации меньше к классу
  2. Добавьте случайный отрывок к классу
  3. Опция Mystery 3rd
5
задан Chris McCall 29 January 2010 в 16:55
поделиться

2 ответа

Хорошо, вот что я сделал:

    internal List<CodeMemberField> createEventHooks()
    {
        string[] eventNames = new string[] { "OnUpdate()", "OnInsert()", "OnDelete()", "OnSelect()", "OnSelectAll()" };
        List<CodeMemberField> eventHooks = new List<CodeMemberField>();

        foreach (string eventName in eventNames)
        {
            CodeMemberField eventHook = new CodeMemberField(); //do it as a FIELD instead of a METHOD
            eventHook.Name = eventName;
            eventHook.Attributes = MemberAttributes.ScopeMask;
            eventHook.Type = new CodeTypeReference("partial void");
            eventHooks.Add(eventHook);
        }
        return eventHooks;
    }

в основном, я изменил свои методы на поля и включал () в названиях «поля». Все еще взломать, но бьет поиск / замена сгенерированного кода (едва).

6
ответ дан 14 December 2019 в 13:36
поделиться

Я столкнулся с этой проблемой до того, как попытался сгенерировать подписи PInvoke через CodeDom. После долгих исследований я обнаружил, что с помощью PInvoke этого достичь невозможно, и думаю, что то же самое, скорее всего, верно и для частичных методов.

Лучшим способом, который я нашел, чтобы обойти это, было сгенерировать файл как есть. Я отметил все методы, которые я намеревался использовать в PInvoke по имени. Затем я искал в файле подписи этих методов с регексом и заменил {}'s на точку с запятой.

Это ужасный хак, но он делает свою работу.

0
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: