Цикл, хотя IList, но с для цикла, а не для каждого - PullRequest
3 голосов
/ 09 января 2010

У меня есть список объектов. Они имеют тип NHibernate.Examples.QuickStart.User. Существует также свойство публичной строки EmailAddress.

Теперь я могу просмотреть этот список с помощью каждого цикла.
Можно ли перебрать Ilist с помощью простого цикла for?
Потому что простая обработка IList как массива, похоже, не работает ...

System.Collections.IList results = crit.List();

foreach (NHibernate.Examples.QuickStart.User i in results)
{
    Console.WriteLine(i.EmailAddress);
}

for (int i = 0; i < results.Count; ++i)
{
    Console.WriteLine(results[i].EmailAddress); // Not Working
}

Ответы [ 3 ]

7 голосов
/ 09 января 2010

Поскольку вы используете неуниверсальный IList, вам необходимо привести значение:

for (int i = 0; i < results.Count; ++i)
    {
        Console.WriteLine(((NHibernate.Examples.QuickStart.User)results[i]).EmailAddress); // Not Working
    }

Кроме того, вы можете сделать свой IList Общей версией, изменив 1-ю строку на:

System.Collections.IList<NHibernate.Examples.QuickStart.User> results = crit.List();

Обратите внимание, что для этого решения вам придется изменить функцию crit.List (), чтобы вернуть этот тип.

2 голосов
/ 09 января 2010

Вы используете базовый IList, который хранит объекты типа Object. Если вы используете foreach, приведение типов выполняется автоматически. Но если вы используете индексатор, как в for (i = 0; i<count..., это не так.

Попробуйте, посмотрите, работает ли оно:

for (int i = 0; i < results.Count; ++i)
{
    var result = (NHibernate.Examples.QuickStart.User)results[i];
    Console.WriteLine(result.EmailAddress); // Not Working
}

...

2 голосов
/ 09 января 2010
for (int i = 0; i < results.Count; ++i)
{
    Console.WriteLine((NHibernate.Examples.QuickStart.User)results[i]).EmailAddress); // Not Working
}

Не забудьте правильно привести тип элемента, поскольку индексатор IList возвращает простое object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...