2

のプロパティを含むクラスがありますList<T>。これらのプロパティの一部である T は、Foo などのクラスから継承するクラスのものです。

public class Foo {}
public class MyTypeA : Foo {}
public class MyTypeB : Foo {}

// Not : Foo
public class MyTypeC {}

public class Bar 
{
    // I can Match these
    public MyTypeA PropA { get; set; }
    public MyTypeB PropB { get; set; }

    // How can I match these based on IsSubclassOf(Foo)
    public List<MyTypeA> PropListA { get; set; }
    public List<MyTypeB> PropListB { get; set; }

    // Do not match the props below
    public MyTypeC PropC { get; set; }
    public List<MyTypeC> PropListC { get; set; }
    public List<string> PropListString { get; set; }

}    

以下に示すように、のサブクラスであるプロパティを既に正常に照合していFooます。

foreach (var oProp in T.GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
    // Find Prop : Foo
    if( oProp.PropertyType.IsSubclassOf( typeof(Foo) ) )
    {
        // Add Property to dictionary
        aPropInheritType.Add(
            oProp.Name, 
            oProp
        );
    }

    // Match List<T>  where T : Foo
    // How do I test for Generic List that's Type T is a subclass 
    // of the class Foo ?

}

Type クラスのジェネリック プロパティがいくつかあるようですが、IsSubclassOf(Foo) に対してテストするためのジェネリック リストのタイプを取得できませんでした。

4

2 に答える 2