2012-04-19 5 views
1

У меня есть общий метод (см. Код ниже) и вы хотите выполнить какое-либо действие, если T - конкретный интерфейс.
Очевидно, я мог бы просто сделать typeof(T).IsAssignableFrom(IFoo), но отражение сравнительно медленное, поэтому я хочу избежать его, если это возможно.Тестирование типового параметра типа для интерфейса

Теперь я знаю, что у меня не может быть другого метода с ограничением, потому что я получу двусмысленную ошибку метода, иначе я бы просто сделал это.

Есть ли способ делать то, что я хочу?
Является ли тот факт, что я хочу сделать это, указать на некоторые архитектурные проблемы?

public T Load<T>(string name) 
{ 
    T result = LoadFromName<T>(name); 

    if(T is IFoo) // Obviously doesn't work as T is a type, not a variable 
     (result as IFoo).FooMethod(); 

    return result; 
} 

ответ

3

Но у есть переменная - result! Что случилось с

var asFoo = result as IFoo; 
if (asFoo != null) 
    asFoo.FooMethod(); 
+0

Не могу поверить, насколько я был глупым! –