我想验证所有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
//...
}
最好的方法是什么?
答案 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)
您可以使用typeof
和Object.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
}
您可以添加随机数量的对象并在此行中添加断点,因此请自行计算输入的次数....或者只是声明一个计数并检查它是否具有相同数量的项目。