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,

Другие вопросы по тегам