var 关键字和 using 名称 space

var key word and using name space

我有一个方法 ExecuteQuery,它返回一个 Datatable 对象,它是对象 _dataAccess 的一个方法,这将在不使用 System.Data[ 的情况下正确编译=22=]

string query = "select * from UserNeeds where userNeedID =" + item.ParentId;
var result = _dataAccess.ExecuteQuery(query, CommandType.Select);
foreach (var rows in result.Rows)
{

}

但是如果我更改了 var 并且如果给出原始类型 Datatable 它会显示编译时间错误,因为我们错过了 System.Data

我的问题是,当我们将 var 保留为类型时,编译器如何理解 System.Data 是名称 space。

或者为什么当我们使用原始 datatype 代替 var 时它是强制的,编译器如何处理相同的?

var 本身不是类型,它是实际类型的占位符,将由编译器解析。由于 DataRowCollection(由 DataRable.Rows 返回)不实现 IEnumerable<DataRow> 而只实现非泛型 IEnumerable 接口 foreach 对象 rows 是类型Object。所以你不能在循环中使用 DataRow 属性和方法。

你需要每次都施放它或者让它由 foreach:

施放
foreach (DataRow row in result.Rows)
{

}

现在您需要将 using System.Data 添加到文件顶部或使用

foreach (System.Data.DataRow row in result.Rows)
{

}

所以它使用 var 编译而不添加命名空间的原因是编译器使用 System.Object 作为 var 因为 DataRowCollection 产生对象而不是 DataRows。

命名空间是任何对象的简称。如果不指定,则需要提供完整的对象名称。

Var 是一种一次性动态数据类型,一旦它使用完整的对象名称动态创建,它就会存储对象类型。