我有以下代码已经运行好几个月,但我忘了用Option Strict On
创建这个类,所以现在我要回去正确清理我的代码,但是我无法想象解决以下问题。
我有一个像这样声明的局部变量:
Private _manageComplexProperties
现在使用option strict,由于没有我理解的As
子句,这是不允许的,但是这样的原因是因为将分配给它的类的实例需要一个类型直到运行时才知道的参数。这可以通过以下代码解决:
Private _type As Type
*SNIP OTHER IRRELEVANT VARIABLES*
Public Sub Show()
Dim requiredType As Type = _
GetType(ManageComplexProperties(Of )).MakeGenericType(_type)
_manageComplexProperties = Activator.CreateInstance(requiredType, _
New Object() {_value, _valueIsList, _parentObject, _unitOfWork})
_result = _manageComplexProperties.ShowDialog(_parentForm)
If _result = DialogResult.OK Then
_resultValue = _manageComplexProperties.GetResult()
End If
End Sub
再次选择strict会因为后期绑定而抛出一些错误,但是一旦我能够正确地成功声明_manageComplexProperties
变量,就应该使用强制转换清除它们,但我似乎无法找到一个有效的解决方案由于直到运行时才知道类型参数。任何帮助将不胜感激。
答案 0 :(得分:1)
将您的变量声明为Object
Private _manageComplexProperties as Object
然后你必须坚持反思,例如调用ShowDialog
方法:
Dim method As System.Reflection.MethodInfo = _type.GetMethod("ShowDialog")
_result = method.Invoke(_manageComplexProperties, New Object() {_parentForm})
答案 1 :(得分:0)
您必须在vb文件的顶部使用option infer on
。它启用了本地type inference
。
使用此选项可以使用Dim
而不使用“As”clausule,就像
C#中的var
。
智能感知
启用Option Infer时的
IntelliSense(正如您所看到的那样具有类型推断)
如果您不想使用选项推断,则必须声明与Activator.CreateInstance