我有一个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
}
答案 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
}
...