2009-07-01 2 views
0

Следующий код не компилируетсяиспользуя типа вара в виде asp.net MVC списка

<ul> 
<% 
foreach(var row in SomeDataTable.Rows) 
{ 
%> 
    <li> 
    <%= Html.ActionLink(row["field1"].ToString(), "action", new { }) %> 
    </li> 
<% 
}v 
%> 
</ul> 

ошибка - не может применить индексирование с [] к выражению типа «объекта»

ВДПА предполагается, что это неявный тип?

Что дает?

Примечание - Я знаю это плохая практика, чтобы использовать DataTable/Dataset как и т.д. и т.д., так держать лошадей на том, если вы можете порадовать :)

+0

Извините за опечатку, исправлено имя переменной, на маленькой ноте - если это был элемент ["field1"], как и раньше, ошибка будет - имя «элемент» не существует в текущем контексте. – 2009-07-01 18:48:32

ответ

3

Не должна ли она быть row["field1"] и не item["field1"]?

+1

спасибо за указав это, исправлено – 2009-07-01 18:49:19

+0

Нет проблем, просто нажмите эту маленькую галочку там :) –

0

Вы должны использовать

row["field1"] 

вместо

item["field1"] 
0

Есть ли у него что-то делать ж/ты называешь пункт [ «field1»], но вы назвали итератор переменной «строка»?

+0

нет, в этом случае ошибка будет - название «элемент» не существует в текущем контексте исправлено, однако, – 2009-07-01 18:51:01

0

Что происходит, когда вы бросаете его как DataRow?

(DataRow row in SomeDataTable.Rows) 
+0

, что работы курс ! – 2009-07-01 23:55:30

2

DataRowCollection не реализует IEnumberable < DataRow> только IEnumerable. Вы должны сначала вызвать SomeDataTable.Rows.Cast < DataRow>() в своем foreach или не использовать var, как предлагает mxmissle.

IEnumerable < DataRow> требуется, чтобы компилятор знал, какой тип перечислит, что требуется для этого использования var.

+0

Хм, ты мог быть прав, но не совсем уверен! из того, что я понимаю (и я могу ошибаться) Тип var - синтаксический сахар, и компилятор выводит тип из коллекции, поэтому , если foreach (строка DataRow в Table.Rows) компилируется отлично! , тогда компилятор должен иметь возможность выводить тип при использовании foreach (var row in Table.Rows) Нет? Или, по-другому, есть что-то, что бы заставить его работать с var - возможно, с System.Data.DatasetExtensions.dll - еще не ткнул туда, надеясь, что кто-то соблазнит меня :) – 2009-07-02 00:03:08

+0

Kumar, да это синтаксический сахар. Проблема здесь в том, что IEnumerable не дает компилятору достаточной информации для определения того, что выходит из Table.Rows. В этом случае ключевое слово var такое же, как foreach (строка объекта в таблице.Rows) Именно поэтому современные коллекции или списки общего назначения реализуют интерфейс IEnumerable < T>. Я не знаю, почему DataRowCollection не был обновлен для поддержки этого.Это может быть немного раздражает – Kleinux

+0

еще как-то компилятор работает с Еогеаспом (DataRow строк в Table.Rows) // компилируется штраф Или это возможно, что использование вара требует IEnumberable как в Еогеаспе (Var строки в таблице .Rows) // не компилирует , который действительно является вопросом здесь – 2009-07-09 15:14:50

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