Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不使用CodeDom实现的情况下添加分部方法_C#_Codedom_Partial Methods - Fatal编程技术网

C# 如何在不使用CodeDom实现的情况下添加分部方法

C# 如何在不使用CodeDom实现的情况下添加分部方法,c#,codedom,partial-methods,C#,Codedom,Partial Methods,如何让CodeDom删除“{}”,这将解决我试图编译的编译器错误?我曾想过只使用CodeSnippetStatement(我宁愿不这样做,因为这首先会破坏使用CodeDom的目的),但我在CodeTypeDeclaration类中找不到添加代码段的位置 所以:我也需要 向类添加无实现的方法 向类中添加随机代码段 神秘第三选项 在尝试通过CodeDom生成PInvoke签名之前,我遇到了这个问题。经过大量的调查,我发现用PInvoke是不可能做到这一点的,我认为对于部分方法也是如此 我发现解决这个

如何让CodeDom删除“
{}
”,这将解决我试图编译的编译器错误?我曾想过只使用
CodeSnippetStatement
(我宁愿不这样做,因为这首先会破坏使用CodeDom的目的),但我在
CodeTypeDeclaration
类中找不到添加代码段的位置

所以:我也需要

  • 向类添加无实现的方法
  • 向类中添加随机代码段
  • 神秘第三选项

  • 在尝试通过CodeDom生成PInvoke签名之前,我遇到了这个问题。经过大量的调查,我发现用PInvoke是不可能做到这一点的,我认为对于部分方法也是如此

    我发现解决这个问题的最佳方法是按原样生成文件。我记下了所有我打算命名为PInvoke的方法。然后,我用正则表达式搜索文件,寻找那些方法签名,并用分号替换
    {}的

    这是一次可怕的黑客攻击,但它完成了任务

    好吧,我是这么做的:

    partial void OnUpdate() {
    }
    
    partial void OnInsert() {
    }
    
    partial void OnDelete() {
    }
    
    partial void OnSelect() {
    }
    
    partial void OnSelectAll() {
    }
    
    内部列表createEventHooks()
    {
    string[]eventNames=新字符串[]{“OnUpdate()”、“OnInsert()”、“OnDelete()”、“OnSelect()”、“OnSelectAll()”};
    List eventHooks=new List();
    foreach(eventNames中的字符串eventName)
    {
    CodeMemberField eventHook=new CodeMemberField();//将其作为字段而不是方法执行
    eventHook.Name=eventName;
    eventHook.Attributes=MemberAttributes.ScopeMask;
    eventHook.Type=新代码类型引用(“部分无效”);
    添加(eventHook);
    }
    返回事件挂钩;
    }
    

    基本上,我将方法更改为字段,并在“字段”名称中包含
    ()
    s。仍然是一个黑客,但比搜索/替换生成的代码(勉强)要好。

    真是一个聪明的黑客!
    partial void OnUpdate() {
    }
    
    partial void OnInsert() {
    }
    
    partial void OnDelete() {
    }
    
    partial void OnSelect() {
    }
    
    partial void OnSelectAll() {
    }
    
        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;
        }