ASPXCheckBoxList有一个名为' SelectedItems'类型' SelectedItemCollection' (它实现ICollection,IEnumerable)
由于某种原因,这之间存在差异:
foreach (ListEditItem si in cblCommonJointOwnership.SelectedItems)
{
//do stuff and have si.Value and si.Text and si.Foo
}
和此:
foreach (var si in cblCommonJointOwnership.SelectedItems)
{
//seems that si is just a plain object here...
}
我意识到这不是特定的DevExpress ..所以我想一个普遍的问题:为什么' var'版本被推断为对象而不是ListEditItem?
由于
答案 0 :(得分:4)
SelectedItemCollection
实施IEnumerable
但不IEnumerable<T>
。因此,编译器对集合中存储的类型一无所知,必须采用最通用的类型(Object
)。
您的第一个语句指定了类型。这实际上会导致集合中每个项目的强制转换回指定的类型,如果集合中的任何元素无法正确转换,则会失败。
答案 1 :(得分:3)
因为SelectedItems
是一个专门的集合。它也不通用。这使得类型推断无法运行。
换句话说,该列表中的对象可以是任何东西;甚至是不同类型的。因此,该集合不提供任何类型的结果。