VBCodeProvider在编译时不能正确转换隐式变量声明



我正在编译我的字符串代码(我从文本文件中读取我的代码)在vb中,它工作得很好,但我有一个函数返回可空的双(双?)

当我像这样使用

Dim x As Double? = Myfunc(1000) 'it returns Nothing

我的x变量填充为Nothing,这是ok的

但是当我像这样使用它

Dim x = Myfunc(1000) 'it returns Nothing

我的x值是0 !!!!

我怎样才能解决这个问题我希望我的用户写代码像第一个代码块

我测试了所有的显式选项和严格选项,但它没有得到我任何东西。

请让我知道我如何使用只是dim x不是dim x作为(类型)谢谢你的帮助

UPDATE:this is Myfunc Code:

   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

如上所述,需要包含Option Infer On来强制编译器将变量创建为所需的类型-在本例中是MyFunc返回的Double?

相关内容

  • 没有找到相关文章

最新更新