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

4

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

现在我可以使用 for each 循环遍历该列表。
是否可能使用简单的 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个回答

7

由于您使用的是非泛型 IList,因此需要强制转换值:

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

或者,您可以将IList变为泛型版本,方法是将第一行更改为:

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

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


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

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


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
}

...


你的意思是:result.EmailAddress - Stefan Steinegger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接