リフレクションでは、特定の型が何らかのインターフェースをモデル化しているC#
かどうかを判断する方法が提供されていますか?System.Type
public interface IMyInterface {}
public class MyType : IMyInterface {}
// should yield 'true'
typeof(MyType)./* ????? */MODELS_INTERFACE(IMyInterface);
ベストアンサー1
いくつかの選択肢があります:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
- C# 6では、
typeof(MyType).GetInterface(nameof(IMyInterface)) != null
汎用インターフェースの場合は少し異なります。
Array.Exists(typeof(MyType).GetInterfaces(), i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMyInterface<>))