VBCodeProvider Не может правильно привести объявление неявной переменной при компиляции
Я компилирую мой строковый код (я читаю мой код из текстового файла) в VB, и он работает нормально, но у меня есть функция, которая возвращает обнуляемый double(Double?)
когда я использую это так
Dim x As Double? = Myfunc(1000) 'it returns Nothing
моя переменная х заполняется ничего, и это нормально
Но когда я использую это так
Dim x = Myfunc(1000) 'it returns Nothing
мое значение х равно 0!!!!
Как я могу решить эту проблему, я хочу, чтобы мои пользователи писали коды, как первый блок кода
Я проверил все Option Explicit и Option Strict, но он ничего не получил меня.
пожалуйста, дайте мне знать, как я могу использовать Просто дим х не Дим х, как (тип) спасибо за вашу помощь
ОБНОВЛЕНИЕ: это код Myfunc:
Function Myfunc(parameterId As Long) As Double?
If parameterId = 1000 Then
Return Nothing
Else
Return tot(parameterId) 'it is a dictionary of values
End If
End Function
И это мой класс компиляции:
Private Shared Function Compile(ByVal vbCode As String) As CompilerResults
Dim providerOptions = New Dictionary(Of String, String)
providerOptions.Add("CompilerVersion", "v4.0")
' Create the VB.NET compiler.
Dim vbProv = New VBCodeProvider(providerOptions)
' Create parameters to pass to the compiler.
Dim vbParams = New CompilerParameters()
' Add referenced assemblies.
vbParams.ReferencedAssemblies.Add("mscorlib.dll")
vbParams.ReferencedAssemblies.Add("System.Core.dll")
vbParams.ReferencedAssemblies.Add("System.dll")
vbParams.ReferencedAssemblies.Add("System.Windows.Forms.dll")
vbParams.ReferencedAssemblies.Add("System.Data.dll")
vbParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
vbParams.ReferencedAssemblies.Add("System.Xml.dll")
vbParams.ReferencedAssemblies.Add("System.Xml.Linq.dll")
vbParams.GenerateExecutable = False
' Ensure we generate an assembly in memory and not as a physical file.
vbParams.GenerateInMemory = True
' Compile the code and get the compiler results (contains errors, etc.)
Return vbProv.CompileAssemblyFromSource(vbParams, vbCode)
End Function
1 ответ
Как обсуждалось выше, Option Infer On
должен быть включен, чтобы заставить компилятор создать переменную как требуемый тип - в этом случае Double?
вернулся MyFunc
,