return 值的 .NET 类型
.NET Type of return value
似乎是一个模棱两可的问题,但问题是我有类似的东西:
Dim a As MyObject
a = GetData(a.GetType)
Function GetData(tp as Type)
DotheWork(tp)
End Function
所以,我想知道是否有任何方法可以省略 GetData() 中的 Type 参数并从赋值左侧的变量中获取它。 (主要是因为我在 GetData() 中使用了反射,所以我需要一个来自参数类型的实例)
这可能吗???非常感谢!
这是不可能的,因为 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 并且您的函数没有 return 任何东西,因此 a
将在 [=12= 之后被分配任何东西],也是。
也许您想实现这样的目标:
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
似乎是一个模棱两可的问题,但问题是我有类似的东西:
Dim a As MyObject
a = GetData(a.GetType)
Function GetData(tp as Type)
DotheWork(tp)
End Function
所以,我想知道是否有任何方法可以省略 GetData() 中的 Type 参数并从赋值左侧的变量中获取它。 (主要是因为我在 GetData() 中使用了反射,所以我需要一个来自参数类型的实例)
这可能吗???非常感谢!
这是不可能的,因为 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 并且您的函数没有 return 任何东西,因此 a
将在 [=12= 之后被分配任何东西],也是。
也许您想实现这样的目标:
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