.NET返回值的类型

时间:2015-09-02 12:31:29

标签: .net vb.net system.reflection

似乎是一个含糊不清的问题,但事实是我有类似的东西:

Dim a As MyObject
a = GetData(a.GetType) 

Function GetData(tp as Type)
     DotheWork(tp)
End Function

所以,我想知道是否有任何方法可以省略GetData()中的Type参数,并从我在赋值左侧的变量中获取它。 (基本上因为我在GetData()中使用Reflection,所以我需要一个来自参数类型的实例)

可能吗???非常感谢!

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为GetData()在分配之前进行了评估。您可以做的是通用方法:

dim a as MyObject = GetData(of MyObject)()

Function GetData(Of T)()
    Dim _t As Type = GetType(T)
    DotheWork(_t)
End Function

我将如何做到这一点。

请注意,初始代码中的a.GetType会失败,因为a是Nothing,而且您的函数不会返回任何内容,因此a之后也不会分配GetData()

也许你想要达到这样的目标:

Function GetData(Of T As { IMyType, New })()

    Dim instance As T = Activator.CreateInstance(Of T)()
    DotheWork(instance)
    Return instance

End Function

Function DotheWork(instance As IMyType)
    instance.Init()
End Function

Interface IMyType
    Sub Init()
End Interface