这是一个快速的。我有以下代码:
foreach (var item in myRepeater.Items)
{
MyViewModelItem x = new MyViewModelItem();
MapToEntity(x, item);
myList.Add(report);
}
void MapToEntity(object entity, Control control);
我希望这段代码能够毫无问题地编译。然而,它没有。
它导致编译时错误,说“MapToEntity”方法有一些无效的参数。编译器无法推断RepeaterItem的类型,它将其识别为普通的System.Object。
为什么会这样?我错过了什么吗?
Ps:我通过删除var关键字并明确定义项目“RepeaterItem”的类型来修复代码。
答案 0 :(得分:6)
RepeaterItemCollection未实现IEnumerable<RepeaterItem>
只是普通IEnumerable
。因此,编译器无法推断出类型。
答案 1 :(得分:1)
首先,您的代码示例显示您在foreach语句中使用名为“item”的变量,然后在其下面声明另一个类型。
第二,您可能将其视为Object类型的原因是myRepeater.Items可能是一般集合而不是特定类型的集合,因此它将返回Object类型。您可以明确说明ForEach循环中的类型,如果存在,它将返回该类型的对象。
一个可能的解决方案是执行myRepeater.Items.OfType()然后你可以使用var关键字。
答案 2 :(得分:1)
正如Anton所说,Items只实现了IEnumerable,这就是它无法推断出类型的原因。
你可能会觉得有用的东西是Cast方法。
myRepeater.Items.Cast<RepeaterItem>()
虽然您的示例很简单,但实际上并不需要它,但对于需要输入可枚举的更复杂的示例可能会有所帮助。