为什么类型推断会破坏SelectedItemCollection?

时间:2013-11-20 17:02:10

标签: c# asp.net devexpress

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?

由于

2 个答案:

答案 0 :(得分:4)

SelectedItemCollection实施IEnumerable但不IEnumerable<T>。因此,编译器对集合中存储的类型一无所知,必须采用最通用的类​​型(Object)。

您的第一个语句指定了类型。这实际上会导致集合中每个项目的强制转换回指定的类型,如果集合中的任何元素无法正确转换,则会失败。

答案 1 :(得分:3)

因为SelectedItems是一个专门的集合。它也不通用。这使得类型推断无法运行。

换句话说,该列表中的对象可以是任何东西;甚至是不同类型的。因此,该集合不提供任何类型的结果。