2012-01-25 3 views
9

Я использую отражение, чтобы получить тип объекта или для этой проблемы объект, который имеет тип свойств экземпляра, во время выполнения, а затем мне нужно изменить тип существующей переменной на это вновь найденный тип. Это возможно? Например, следующий код делает не работы на линии указано в:Как отличить объект от типа, извлеченного во время выполнения

Public Sub DoSomething(x As T, y As T, exp As String) 

'This is a instance property on the object of a different type 
'i.e. 'T.AnotherType' We need to reflect to find out what type of object 
'AnotherType is and work with it 
If exp.Split(".").Count Then 
    Dim tp As Type = Nothing 
    tp = x.GetType 
    tp = tp.GetProperty(exp.Split(".").ElementAt(0)).PropertyType() 
    'Line below works, gets the right type, and now I need both x and y values passed in to be cast to this type. 
    Dim typ As Type = tp.GetType 
    'The line below WILL NOT work; can't cast to an unknown type at compile time - makes sense, but this is where I need a solution 
    x = DirectCast(x, typ) 
End If 

End Sub 

Я также попытался CTypeDynamic в .NET в Карелии 4.0 и подумал я на что-то. Строка кода ниже фактически компилируется, но во время выполнения приведена следующая ошибка ниже.

x = CTypeDynamic(x, tp.GetType()) 

Преобразование из типа '[TypeOfT]' к типу 'RuntimeType' не является допустимым.

Замечание выше, [TypeOfT] на самом деле не указано в сообщении об ошибке, а тип объекта, переданный в метод.

Так есть в любом случае без отчетности случая или связки «если TYPEOF (...» заявление, которые я могу использовать тип, я нашел во время выполнения и преобразующее другой объект с его типом динамически?

Спасибо! (решение может быть в VB.NET или C# - спасибо)

ответ

7

Попробуйте Convert.ChangeType

If exp.Split(".").Count Then 
    Dim tp As Type = Nothing 
    tp = x.GetType 
    tp = tp.GetProperty(exp.Split(".").ElementAt(0)).PropertyType() 
    'Line below works, gets the right type, and now I need both x and y values passed in to be cast to this type. 
    Dim typ As Type = tp.GetType 
    x = Convert.ChangeType(x, typ) 
End If 
+0

Почему downvote –

+0

не я, я только что проверил это Позвольте мне попробовать его – atconway

+1

?.! Я получил следующее исключение: Object должен реализовать IConvertible. – atconway

Смежные вопросы