确保List <t>类型中的所有元素都是T </t>

时间:2012-01-11 18:03:10

标签: c# .net oop generics .net-2.0

我想验证所有List<T>的元素类型是T

我可以拥有List<object>包含对象,字符串,整数,产品,供应商等等,但在我的情况下,如果List<T>被定义为List<object>所有元素必须是对象。

也就是说,我想确保元素的类型是传入泛型类型的 exact 类型,而不是继承链中的任何其他类型。

示例:

public void Foo<T>(List<T> list)
{
    // if not all elements are of type T (not SubClass of T) throw exception

    //...    
}

最好的方法是什么?

4 个答案:

答案 0 :(得分:8)

假设T是基类,则要禁止派生类。

if(list.Any(element => element.GetType() != typeof(T))
    throw new ArgumentException();

答案 1 :(得分:2)

我认为这样的事情就是你所追求的:

public static Boolean AssertNoSubtypes<T>(List<T> items) {
    return items.All(i=>i.GetType().Equals(typeof(T)));
}

答案 2 :(得分:0)

您可以使用typeofObject.GetType()来检查确切的类型。例如:

foreach(T item in list)
{
    if(! typeof(T).Equals(item.GetType())
    {
        /* Throw */
    }
}

答案 3 :(得分:0)

我同意Oded的观点,但如果您想确定或处理每个元素,您可以使用foreach。

foreach(object item in list)
{
    //whatever you want
}

您可以添加随机数量的对象并在此行中添加断点,因此请自行计算输入的次数....或者只是声明一个计数并检查它是否具有相同数量的项目。