实现特定接口的 "Type" 的 C# 列表

C# list of "Type" that implements specific interface

我想创建一个 List<System.Type> listOfTypesOfGlasses ,其中 Type 必须实现一个特定的接口 IGlass ,这样我就可以加载眼镜类型。 有没有办法在编译时强制执行此约束(必须实现 IGlass)?

实现隐藏列表的method/class。

class YourClass {
    // intentionally incomplete
    private List<Type> listOfTypesOfGlasses;
    public void AddToList<T>() : where T: IGlass
    {
        listOfTypesOfGlasses.Add(typeof(T));
    }
}

编辑:下面是这里的原始答案,假设 Type 表示占位符,而不是 System.Type

您需要做的就是 List<IGlass>.

您应该围绕具有约束的 List<T> 编写自己的包装器 class。

Subclass List<T> 并对其施加通用约束 - 但是不鼓励这种做法。

否 - typeof(IGlass)typeof(Glass) 都是 Type 对象 - 没有区别 类 可以在通用约束中过滤。没有对存储的 起作用的通用限制。如果你想存储 个实例 的类型都实现 IGlass 那是可能的,但你不能过滤可以存储的实际 Type 对象。