Option Strict对于直到运行时才知道泛型类型的问题

时间:2013-10-17 11:15:11

标签: vb.net type-parameter option-strict

我有以下代码已经运行好几个月,但我忘了用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变量,就应该使用强制转换清除它们,但我似乎无法找到一个有效的解决方案由于直到运行时才知道类型参数。任何帮助将不胜感激。

2 个答案:

答案 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

当选项推断和选项严格关闭时

智能感知

enter image description here

启用Option Infer时的

IntelliSense(正如您所看到的那样具有类型推断)

enter image description here

如果您不想使用选项推断,则必须声明与Activator.CreateInstance

返回的变量匹配的变量