2015-01-30 4 views
1

У меня есть переносимый компонент в моем универсальном приложении, и, таким образом, компонент использует .NET Portable v.4.6. В этом компоненте я пытаюсь проверить, реализует ли тип, определенный переменной TypemyType определенный интерфейс IMyinterface.Убедитесь, что тип, определенный переменной Type, реализует интерфейс в .NET Portable

Если бы я использовал рамки стандарта .NET, я мог бы проверить, если myType.GetInterface("MyClass.IMyinterface") != null

или если

(typeof(IMyinterface).IsAssignableFrom(myType)) == true

(см: http://www.hanselman.com/blog/DoesATypeImplementAnInterface.aspx)

Однако эти методы не доступны в .NET Portable v.4.6. Любые идеи, как я мог бы сделать эту проверку в этом случае?

ответ

1

Я думаю, вам нужно добавить следующее с помощью:

using System.Reflection; 

, а затем сделать проверку, как это:

(typeof(IMyinterface).GetTypeInfo().IsAssignableFrom(myType.GetTypeInfo())) == true 
0

Это не оставляет исключений, однако myType теперь может быть нулевым.

var myObject = myType as IMyinterface 

//Error proof the assignment to interface. 
if (typeof(IMyinterface) == myType.GetType()) 
{ 
    //code 
} 

Или

if (myType != null) 
{ 
    //Code 
} 

Или

if (myType is IMyinterface) 
    { 

    } 
+0

Я тестировал их, но они не работают для меня. Я предполагаю, что во всех проверках выше вы хотите проверить 'myObject' вместо' myType'? Проблема в том, что 'myObject' всегда' null', независимо от того, реализует ли 'Type myType' интерфейс' IMyinterface'. – Zni

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