【问题标题】:How to create optional arguments in Visual Basic generated through CodeDom?如何在通过 CodeDom 生成的 Visual Basic 中创建可选参数?
【发布时间】:2013-08-27 17:34:19
【问题描述】:

这是问题“Can CodeDom create optional arguments when generating a c# method?”的表亲

我尝试了there给出的答案。

不过,当我尝试编译时,我收到以下错误:

错误 BC30455:未为“公共函数栏”的参数“可选参数”指定参数(可选参数作为整数)作为整数

我已将其提炼为不支持 OptionalAttribute、DefaultParameterValueAttribute 或两者的 Visual Basic 编译器。

这是我正在编译的提炼代码:

Imports System.Runtime.InteropServices

Namespace SSI.RuntimeGenerated.FunctionsNamespace
    Public Class Functions
        Public Function Foo() As Integer

            return Bar()

        End Function

        Public Function Bar( _
            <[Optional], DefaultParameterValue(1)> _
            ByVal optionalParam As Integer) _
                As Integer

            return optionalParam

        End Function

    End Class
End Namespace

使用以下命令编译:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:library /out:foobar.dll foobar.vb /langversion:11

产生以下输出:

Microsoft (R) Visual Basic Compiler version 11.0.50709.17929
Copyright (c) Microsoft Corporation All rights reserved.

C:\<snip>\foobar.vb : error BC30455: Argument not specified for parameter
'optionalParam' of 'Public Function Bar(optionalParam As Integer) As Integer'.
            return Bar()
                   ~~~~~

如果我手动将方法签名更改为

Public Function Bar(Optional ByVal optionalParam As Integer) As Integer

然后它编译就好了。

所以我的问题是:

  1. 如何在通过 CodeDom 生成的 Visual Basic 中创建可选参数?
  2. vbc 是否甚至支持使用 OptionalAttribute 和/或 DefaultParameterValueAttribute?
  3. 如果 vbc 不支持这些属性,是否有任何可能的方法来创建可选参数而不使用 CodeSnippetStatement?
  4. 如果没有其他方法,是否可以挽救我使用 CodeDom 完成的其他工作,这样我最终不必手动生成我的方法?我是否必须在 CodeSnippetTypeMember 中手动构建其余部分?甚至 会起作用吗?

【问题讨论】:

    标签: vb.net optional-parameters codedom vbc vbcodeprovider


    【解决方案1】:

    VB.NET 不支持OptionalAttribute。我找不到任何明确说明的官方文档,但是如果您尝试在 VB.NET 项目中使用它,它将没有任何效果。要在 VB.NET 中创建可选参数,您必须使用 Optional 关键字,例如:

    Public Class Functions
        Public Function Foo() As Integer
            Return Bar()
        End Function
    
        Public Function Bar(Optional ByVal optionalParam As Integer = 1) As Integer
            Return optionalParam
        End Function
    End Class
    

    【讨论】:

    • 呃。感谢您的验证。我已经开始重写我的 CodeDom 东西,以便从我的模型中生成方法。不应该太难,我只是希望 VBCodeProvider 为我做它应该做的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2021-10-11
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多