2016-11-24 4 views
0

У меня есть метод ExecuteQuery и он возвращает Datatable объект, который представляет собой метод объекта _dataAccess, это будет компилировать собственно с, используя System.Dataвар ключевое слово и использовать пространство имен

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

} 

но если я изменил вар и если вы укажете оригинальный тип Datatable, он покажет кратковременную ошибку, поскольку мы пропустили System.Data.

Мой вопрос заключается в том, как компилятор может понять, что System.Data - это пространство имен, когда мы сохраняем var как тип.

или почему это заставляет, когда мы используем оригинал datatype вместо var, как компилятор передает то же самое?

+0

basicaly var является анонимным типом, который вы можете прочитать об этом [здесь] (https://msdn.microsoft.com/en-us/library/bb397696.aspx) –

+0

@ m.rogalski: ['var'] (https://msdn.microsoft.com/en-us/library/bb383973.aspx) не является анонимным типом, он даже не связан с ним. Значение keword 'var' подобно заполнителю для фактического типа этой переменной. Поэтому вам не нужно писать «Словарь <строка, словарь >> dict = новый словарь <строка, словарь >>();', но вы может использовать 'var dict = new Dictionary >>()' –

ответ

2

var не является само по себе, он является заполнителем для фактического типа, который будет разрешен компилятором. Начиная с DataRowCollection (возвращается DataRable.Rows) не реализует IEnumerable<DataRow>, а только не общий интерфейс IEnumerableforeach объект 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.

0

Пространство имен - это короткая запись любого объекта. Если вы не укажете, вам нужно указать полное имя объекта.

Var - одноразовый динамический тип данных, который хранит типы объектов, когда он создает динамически с полным именем объекта.

Смежные вопросы