循环遍历List,但是使用for循环,而不是foreach

时间:2010-01-08 22:46:24

标签: c# for-loop

我有一个IList的对象。 它们的类型为NHibernate.Examples.QuickStart.User。 还有一个EmailAddress公共字符串属性。

现在我可以使用for循环遍历该列表 是否可以通过简单的for循环遍历Ilist? 因为简单地将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 个答案:

答案 0 :(得分:7)

由于您使用的是非通用IList,因此您需要转换值:

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

或者,您可以通过将第1行更改为:

来使IList成为通用版本

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

请注意,对于此解决方案,您必须更改crit.List()函数以返回此类型。

答案 1 :(得分:2)

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

请记住正确转换元素类型,因为IList索引器返回一个简单的object

答案 2 :(得分:2)

您正在使用基本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
}

...