2015-02-02 1 views
0

У меня есть метод, который получает в основном объект dynamic. Это связано с динамической диспетчеризацией, и не стоит обсуждать, почему у меня есть вход dynamic.Динамический объект: Получить общий тип и предоставить его другому методу

Я знаю, что этот объект dynamic представляет собой тип ASpecialClass<T>, где T неизвестно во время компиляции. Есть ли способ извлечь тип T и передать его другому методу?

Как:

public void DoSomething(dynamic inputObject)//At this point, I know that it implements ASpecialClass<T>, but I don't know what is the T type 
{ 
    extracType(InputObject); 
    CallOtherMethod<With_the_extracted_Type>(inputObject); 
} 

Там две вещи здесь:

  1. Есть ли способ извлечь тип T параметра?
  2. Возможно ли вернуть его другому способу, который является общим?

Спасибо

+0

Я нашел эти два ответы уже на SO - надеюсь, что они помогут: http://stackoverflow.com/questions/7362532/get-the-type-for-a-object-declared-dynamic и http://stackoverflow.com/questions/1408120/how -to-call-generic-method-with-a-given-type-object. –

ответ

0

Ответа на вопрос 1:

static IEnumerable<Type> GetGenericTypeArgument(dynamic inputObject) 
    { 
     var genType = inputObject.GetType(); 
     return genType.GetGenericArguments(); 
    } 

Ответ на вопрос 2:

Вы должны использовать отражение для вызова шаблонного метода, передавая общий аргумент, представленный в Ответе 1. Это условие уже было ответировано @How do I use reflection to call a generic method?

+0

Большое спасибо за часть 1 вопроса, это то, что я искал. Что касается части 2, есть ли способ избежать отражения? – J4N

+0

Если вы не хотите использовать отражение, вы всегда можете использовать выражения Linq/Lambda. Есть ответ, как это сделать @ http://stackoverflow.com/questions/2850265/calling-a-generic-method-using-lambda-expressions-and-a-type-only-known-at-runt –

+0

Nice , Является ли это более эффективным с лямбда-выражением? – J4N

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

  • Нет связанных вопросов^_^