编译器在visual studio中没有使用var关键字检测类型

Ido*_*nts 0 c# var type-inference

在以下代码中,row被视为object是否DataGridViewRow.

foreach (var row in datagridview.Rows)
{
   row.Visible = false  //<- error because no Visible property
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?不应该排DataGridViewRow

Ale*_*lex 6

你要调用datagridview.Rows返回类型的实例DataGridViewRowCollection,它实现了非泛型 ICollection,IEnumerableIList接口,因此,当你做"的foreach"它将返回类型的实例System.Object.

在语句中使用隐式类型变量时,变量var row的类型row现在将变为System.Object.

要解决此问题,您可以rowforeach语句中明确指定类型:

foreach (DataGridViewRow row in datagridview.Rows)
{
   row.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为foreach实现以静默方式执行从Enumerator.Currentto类型 返回的每个对象的显式转换(强制转换)DataGridViewRow,您可以在这里阅读.