C# リフレクションを使用して型がインターフェイスを実装しているかどうかを判断する方法 質問する

C# リフレクションを使用して型がインターフェイスを実装しているかどうかを判断する方法 質問する

リフレクションでは、特定の型が何らかのインターフェースをモデル化しているC#かどうかを判断する方法が提供されていますか?System.Type

public interface IMyInterface {}

public class MyType : IMyInterface {}

// should yield 'true'
typeof(MyType)./* ????? */MODELS_INTERFACE(IMyInterface);

ベストアンサー1

いくつかの選択肢があります:

  1. typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
  2. typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
  3. C# 6では、typeof(MyType).GetInterface(nameof(IMyInterface)) != null

汎用インターフェースの場合は少し異なります。

Array.Exists(typeof(MyType).GetInterfaces(), i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMyInterface<>))

おすすめ記事