2015-09-02 2 views
0

Кажется неоднозначный вопрос, но дело в том, что у меня есть что-то вроде:.NET Тип возвращаемого значения

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

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

Итак, что я хочу знать, есть ли способ, чтобы опустить этот параметр Type в GetData() и получить его из переменной, которую я имею в левой части задания. (В основном причина, по которой я использую Reflection в GetData(), поэтому мне нужен экземпляр из типа параметра)

Возможно ли это? Большое спасибо!

+1

я удалил C# тег, так как это, кажется, больше о vb.net синтаксис, чем .net – Sayse

+2

Вы должны начать с включением 'Option Strict ' – Plutonix

ответ

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 не будет назначен после 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 
+0

Большое спасибо SchlaWiener, это действительно хорошая идея !!!! – Fxbrandon