Это двоюродный брат вопроса «Can CodeDom create optional arguments when generating a c# method?»Как создать необязательные аргументы в Visual Basic, сгенерированные через CodeDom?
И я попробовал ответить there.
Тем не менее, когда я пытаюсь скомпилировать, я получаю следующее сообщение об ошибке:
error BC30455: Argument not specified for parameter 'optionalParam' of 'Public Function Bar(optionalParam As Integer) As Integer
Я дистиллированную это вплоть до Visual Basic Compiler не поддерживает ни OptionalAttribute, DefaultParameterValueAttribute, или обоих.
Вот дистиллированная код, я компиляции:
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
тогда он компилируется просто отлично.
Так что мои вопросы:
- Как создать дополнительные аргументы в Visual Basic, сгенерированные с помощью CodeDom?
- Поддерживает ли vbc использование опции OptionalAttribute и/или DefaultParameterValueAttribute?
- Если vbc не поддерживает эти атрибуты, существует ли какой-либо возможный способ создания необязательных аргументов, не прибегая к использованию CodeSnippetStatement?
- Если нет другого способа, тогда можно ли спасти другую работу, которую я сделал с CodeDom, поэтому мне не удается в значительной степени генерировать мои методы вручную? Должен ли я в значительной степени строить остальное вручную внутри CodeSnippetTypeMember? Было бы даже , что работы?
Ugh. Спасибо за проверку. Я уже начал переписывать свой материал CodeDom, чтобы просто генерировать метод из моих моделей. Не должно быть слишком жестким, я просто предпочел бы, чтобы VBCodeProvider делал это для меня, как и предполагалось. – devrelm