2010-01-08 98 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