我正在编译我的字符串代码(我从文本文件中读取我的代码)在vb中它工作正常,但我有一个函数返回可以为空的双(Double?)
当我像这样使用它时
Dim x As Double? = Myfunc(1000) 'it returns Nothing
我的x变量填充Nothing,没关系
但是当我像这样使用它时
Dim x = Myfunc(1000) 'it returns Nothing
我的x值是0 !!!!
我该如何解决这个问题 我希望我的用户像第一个代码块一样编写代码
我测试了所有Option Explicit和Option Strict但它没有获得任何东西。
请让我知道我怎么能使用Just dim x而不是Dim x as(type) 谢谢你的帮助
更新:这是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
答案 0 :(得分:2)
如上所述,需要包含Option Infer On
以强制编译器将变量创建为所需类型 - 在本例中为Double?
返回的MyFunc
。