2010-09-27 72 views
0

我正在使用名爲SiteFinity的產品。將複雜數據存儲在列表中

我有一個類,它看起來像這樣:

public class Categories 
{  
    public IContent oContent {get; set;}  
} 

我然後通過列表循環,並試圖檢查當前值是否已經存在,就像這樣:

IList items = base.CreateDataSource(); 
IList filteredList = new List<string>(); 

foreach (IContent cnt in items) 
{ 
    if (!filteredList.Contains(cnt)) 
    { 
     filteredList.Add(cnt); 
    } 
} 
return filteredList; 

但這會返回一個錯誤。我是否正確使用.Contains?

更新:

確定我已經更新:

List<IContent> filteredList = new List<IContent>(); 

然而,IContent具有其可以被調用以提取進一步信息的方法,它是像這樣:

foreach(IContent cnt in items) 
{ 
    string strCat = cnt.GetMetaData("Category"); 
} 

現在,雖然我想filteredList包含多個IContent項目,我想檢查字符串GetMetaData之前決定是否噸他應該添加項目。那有意義嗎?

謝謝。

回答

0

您不能將IContent對象添加到List<string>,因爲List<String>只能保存字符串。

將其更改爲List<IContent>,它會正常工作。

另外,C#不是Java;不要聲明你的列表變量爲IList
如果您將它們聲明爲實際類型(List<string>和任何CreateDataSource返回),那麼您就不會遇到此問題。

1

你需要改變:

System.Collections.IList filteredList = new List<string>(); 

List<IContent> filteredList = new List<IContent>(); 

更新

這聽起來像你需要有IContent實施IEquatable<T>因爲這是List<T>.Contains查找界面進行比較時。然後在Equals裏面比較字符串值。

當在包含,IndexOf,LastIndexOf和Remove等方法中測試相等性時,IEquatable接口由泛型集合對象(如Dictionary,List和LinkedList)使用。它應該用於可能存儲在通用集合中的任何對象。

而且隨着音符提,不要忘記:

如果實現IEquatable,你也應該覆蓋對象的基類的實現。Equals(Object)和GetHashCode,以便它們的行爲與IEquatable.Equals方法的行爲一致。如果您重寫Object.Equals(Object),則在調用您的類上的靜態Equals(System.Object,System.Object)方法時,也會調用您的重寫實現。這確保Equals方法的所有調用返回一致的結果。

Here就是一個例子。

+0

嗨, 這是通過調試類型實際上中途.... – higgsy 2010-09-27 11:59:39

+0

我把它改爲: System.Collections.IList filteredList =新名單(); IContent有一個字符串屬性,像這樣: 的foreach(在項IContent CNT){ 串strCategory = cnt.getMetaData( 「分類」); } 我實際上需要檢查這個字符串值,以確定cnt是否應該被添加到列表.... deos有意義 – higgsy 2010-09-27 12:01:17

+0

對不起,這一切都有點gobbeldy gook! 我已將它更改爲: System.Collections.IList filteredList = new List (); IContent有一個像這樣的字符串屬性:foreach(IContent cnt in items){string strCategory = cnt.getMetaData(「Category」); }我實際上需要檢查這個字符串值,以確定是否應該將cnt添加到列表中......有意義的deos – higgsy 2010-09-27 12:04:42