【问题标题】:Workaround for VB.NET partial method using CodeDom?使用 CodeDom 的 VB.NET 部分方法的解决方法?
【发布时间】:2009-11-30 15:20:05
【问题描述】:

我知道 CodeDom 不支持部分方法,但有解决方法吗?我找到了workaround for C#,但我需要一个用于 VB.NET。谢谢。

【问题讨论】:

    标签: vb.net codedom partial-methods


    【解决方案1】:

    这是一种可怕的 hack,与 C# 一样邪恶,但它确实有效:

    Imports System.CodeDom
    Imports System.CodeDom.Compiler
    Imports System.IO
    
    Module Module1
    
        Sub Main()
            Dim unit As New CodeCompileUnit
            Dim nspace As New CodeNamespace("SomeNamespace")
            Dim vbclass As New CodeTypeDeclaration("SomeClass")
            vbclass.IsClass = True
            Dim snippet As New CodeSnippetTypeMember("Partial _")
            vbclass.Members.Add(snippet)
            Dim method As New CodeMemberMethod()
            method.Name = "SomeMethod"
            method.Attributes = MemberAttributes.Private
            vbclass.Members.Add(method)
            nspace.Types.Add(vbclass)
            unit.Namespaces.Add(nspace)
    
            dim provider As CodeDomProvider = CodeDomProvider.CreateProvider("VB")
            Dim options As New CodeGeneratorOptions()
            options.BlankLinesBetweenMembers = False
            dim writer As new StringWriter()
            provider.GenerateCodeFromCompileUnit(unit, writer, options)
            Console.WriteLine(writer.ToString())
            Console.ReadLine()
        End Sub
    
    End Module
    

    请注意,BlankLinesBetweenMembers 选项对于使 hack 起作用至关重要。输出:

    Option Strict Off
    Option Explicit On
    
    Namespace SomeNamespace
        Public Class SomeClass
    Partial _
            Private Sub SomeMethod()
            End Sub
        End Class
    End Namespace
    

    【讨论】:

    • 感谢您的回复,但我不希望通过更改 BlankLinesBetweenMembers 选项来影响我生成的所有代码。
    【解决方案2】:

    我最终检测到了语言并使用了 CodeSnippetTypeMember()

    Dim onDeleting = "Partial Private Sub OnDeleting()" & Environment.NewLine & "End Sub"
    type.Members.Add(New CodeSnippetTypeMember(onDeleting))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多