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 是一种一次性动态数据类型,一旦它使用完整的对象名称动态创建,它就会存储对象类型。
我有一个方法 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 是一种一次性动态数据类型,一旦它使用完整的对象名称动态创建,它就会存储对象类型。