1. ホーム
  2. c#

[解決済み] C#のリフレクションで型がインターフェースを実装しているかどうかを判断する方法

2022-03-15 23:54:42

質問

はたして リフレクション C# は、ある特定の System.Type 型があるインターフェイスをモデル化しているか?

public interface IMyInterface {}

public class MyType : IMyInterface {}

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

解決方法は?

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

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

汎用的なインターフェースの場合は、ちょっと違いますね。

typeof(MyType).GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IMyInterface<>))