2010-01-08 101 views
3

我有一个IList的对象。 它们是NHibernate.Examples.QuickStart.User类型。 还有一个EmailAddress公共字符串属性。循环虽然IList,但与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 
} 

回答

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 
} 

...

+0

你的意思是:'result.EmailAddress' – 2010-01-08 22:58:53

+0

哦,感谢指出了这一点:) – chakrit 2010-01-08 23:22:39