这是问题“ CodeDom 在生成 ac# 方法时可以创建可选参数吗? ”的表亲。
我尝试了那里给出的答案。
不过,当我尝试编译时,我收到以下错误:
错误 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
然后它编译就好了。
所以我的问题是:
- 如何在通过 CodeDom 生成的 Visual Basic 中创建可选参数?
- vbc 甚至支持使用 OptionalAttribute 和/或 DefaultParameterValueAttribute 吗?
- 如果 vbc 不支持这些属性,是否有任何可能的方法来创建可选参数而不使用 CodeSnippetStatement?
- 如果没有其他方法,那么是否有可能挽救我使用 CodeDom 完成的其他工作,这样我最终不必手动生成我的方法?我是否必须在 CodeSnippetTypeMember 中手动构建其余部分?甚至会起作用吗?