确保List<;T>;类型为T

本文关键字:类型 gt List 确保 lt | 更新日期: 2023-09-27 18:20:12

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

我可以有一个包含object、string、int、Product、Supplier等的List<object>,但在我的情况下,如果List<T>定义为List<object>,则所有元素都必须是对象。

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

示例:

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

最好的方法是什么?

确保List<;T>;类型为T

假设T是基类,则不允许派生类。

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

我想你想要的就是这样的东西:

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

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

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

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

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

您可以添加任意数量的对象,并在这一行中放置断点,因此可以自己计算它输入的次数。。。。或者简单地声明一个计数并检查它是否有与您添加的相同数量的项目。