// 基底クラス public class Base {} // サブクラス public class SubClass : Base {} // とあるクラス public class Foo { // 実体は Listこれでリフレクションを用いて、Classes プロパティが IEnumerableだけど IEnumerable として公開 public IEnumerable Classes { get { return new List<SubClass>(); } } }
var propType = typeof(Foo).GetProperty("Classes").PropertyType; bool impl = false; // これは false impl = propType.IsSubclassOf(typeof(IEnumerable)); // これで IEnumerable を実装していることは判別できた var filter = new System.Reflection.TypeFilter((t, obj) => t == (Type)obj); impl = propType.FindInterfaces(filter, typeof(IEnumerable)) > 0; // 最終的にはこう impl = impl && propType.IsGenericType && propType.GetGenericParameters()[0].IsSubclassOf(typeof(Base));かなり長ったらしくてめんどくさい。
なんか簡単な方法があるはずだと思って調べてみたら、これだけでできた。
typeof(IEnumerable<Base>).IsAssignableFrom(propType)代入可能かどうかで調べたらよかったのか。
0 件のコメント :
コメントを投稿