【问题标题】:How to create a List which contains a type of interface, to only add class types which inerhit this interface?如何创建一个包含接口类型的列表,只添加不符合该接口的类类型?
【发布时间】:2015-06-19 18:18:46
【问题描述】:

我想创建一个类类型的集合,我只想要类型,而不是对象——它们都是 inerhit

IBuilderType

那么如何编写列表->

public List<typeof(IBuilderType)> Builder;

实现这一目标:

var listBuilder = new List<typeof(IBuilderType)> 
        {typeof (BasicCategoryBuilder)};

我基本上想限制您可以添加到此列表中的类型(类范围)

【问题讨论】:

    标签: c#-4.0


    【解决方案1】:

    Type 不是通用的,因此您无法在编译时检查 List`1 的元素是否为 IBuilderType 的类型。您可能希望通过代码检查类型层次结构并使用一些方法封装列表,但没有办法在泛型中约束Type

    var listBuilder = new List<Type/* : IBuilderType*/>() {
        typeof(BasicCategoryBuilder)
    };
    

    【讨论】:

    • 是的,我现在使用了一个普通的类型列表,并为 IBuilderType 添加了一个检查方法 - 非常感谢您的帮助:)
    【解决方案2】:

    您必须像这样创建一个具有通用类型“System.Type”的列表:

    List<System.Type> myList = new List<System.Type>();
    

    那么你可以像这样添加类型:

    myList.Add(typeof(Bar));
    myList.Add(typeof(Foo));
    

    【讨论】:

      猜你喜欢
      • 2011-10-26
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2012-10-08
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多