首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量关键字与名称空间的使用

变量关键字与名称空间的使用
EN

Stack Overflow用户
提问于 2016-11-24 09:09:16
回答 2查看 58关注 0票数 0

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

代码语言:javascript
复制
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

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

或者,当我们使用原始datatype代替var时,它为什么要强迫编译器处理相同的内容呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-24 09:12:59

var本身不是一个类型,它是将由编译器解析的实际类型的占位符。由于DataRowCollection(https://msdn.microsoft.com/en-us/library/ms135386(v=vs.110%29.aspx)(returned by DataRable.Rows)不实现IEnumerable<DataRow>,而只实现非泛型IEnumerable接口,所以foreach对象rowsObject类型。所以不能在循环中使用DataRow属性和方法。

你需要每次都抛出它,或者让它被foreach抛出

代码语言:javascript
复制
foreach (DataRow row in result.Rows)
{

}

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

代码语言:javascript
复制
foreach (System.Data.DataRow row in result.Rows)
{

}

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

票数 2
EN

Stack Overflow用户

发布于 2016-11-24 09:48:18

命名空间是任何对象的简短表示法。如果您没有指定,那么需要给出完整的对象名称。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40782034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档