簡體   English   中英

C# - 子類類型列表

[英]C# - list of subclass Types

我想要一個類類型列表(不是類實例列表),其中List的每個成員都是MyClass的子類。

例如,我可以這樣做:

List<System.Type> myList;
myList.Add(typeof(mySubClass));

但我想限制列表只接受MyClass的子類。

與此類問題截然不同。 理想情況下,我想避免linq,因為它在我的項目中目前尚未使用。

Servy在他的評論中是正確的Lee 在他的評論 組合比繼承更為可取 所以這是一個很好的選擇:

public class ListOfTypes<T>
{
    private List<Type> _types = new List<Type>();
    public void Add<U>() where U : T
    {
        _types.Add(typeof(U));
    }
}

用法:

var x = new ListOfTypes<SuperClass>();
x.Add<MySubClass>()

請注意,如果要為其他代碼提供對包含的Type的讀訪問權,而不需要依賴此類的其他代碼,則可以使此類實現類似IReadOnlyList<Type>的接口。

但是如果你想繼承,你可以創建自己繼承自List的類,然后添加你自己的通用Add方法,如下所示:

public class ListOfTypes<T> : List<Type>
{
    public void Add<U>() where U : T
    {
        Add(typeof(U));
    }
}

只要知道Lee說的話 :用第二個版本你仍然可以Add(typeof(Foo))

您應該從List派生一個列表類,並覆蓋Add方法以執行您需要的類型檢查。 我不知道在.NET中自動執行此操作的方法。

像這樣的東西可以工作:

public class SubTypeList : List<System.Type>
{
    public System.Type BaseType { get; set; }

    public SubTypeList()
        : this(typeof(System.Object))
    {
    }

    public SubTypeList(System.Type baseType)
    {
        BaseType = BaseType;
    }

    public new void Add(System.Type item)
    {
        if (item.IsSubclassOf(BaseType) == true)
        {
            base.Add(item);
        }
        else
        {
            // handle error condition where it's not a subtype... perhaps throw an exception if
        }
    }
}

您需要更新向列表添加/更新項的其他方法(索引setter,AddRange,Insert等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM