2015-10-06 139 views
0

我想自己寫一個List。 所以我有一個類List和類ListItem。 我現在想要做的是創建不同類,例如類car。我想從類ListItem中推導出類car,以便我可以創建一個List汽車。 現在類List應該有不同的方法,就像一個C#給你的。 我寫了一個Add和一個Count方法,並且都可以工作。 這裏是棘手的部分...我想寫一個函數來查找列表中的項目。問題是我不能僅僅比較它們,因爲1.我不知道對象將是什麼樣子以及它會有什麼成員。 2.我不想比較類ListItem的特徵,因爲它們與真實對象無關,它們只與List有關。如何比較兩個複雜對象?

我的想法是,爲每個對象創建一個列表類,所以在我的例子中,它將是一個從列表類推導出來的carList。這樣我就可以編寫一個Methode來知道要比較的內容,因爲它可以知道ListItem對象。現在我不想爲每個想要列表的對象創建一個列表類。必須有不同的方式sice c#也給你相同的列表類。 任何人都可以幫忙嗎?

+1

您的問題是「任何人都可以幫忙嗎?」 - 答案顯然是「是的,有人可以幫忙」。但是,請分享一下你所擁有的東西,幫助你更輕鬆地幫助你。 – Dietz

+0

@fubo我不知道你的意思......當然,我把這個對象作爲一個超載來搜索我的函數! –

+0

你可以給我們提供'Find'方法的方法簽名嗎?會不會有'Contains'方法。 – Gusdor

回答

-1

你應該在你的Car -class覆蓋Equals(從object繼承):然後

class car 
{ 
    public override bool Equals(object other) { 
     var o = other as car; 
     if (o == null) return false; 

     if this.myProperty = o.myProperty return true; 

     return false; 
    } 
} 

名單將使用此implenentation因爲如果兩輛車都是平等的檢測。在您Find - 方法現在您只需在列表中要求每一個項目,如果它等於一個搜索:

if (currentItemInList.Equals(searchItem)) // ... 

編輯:當任何類實現Equals你應該總是在同樣的情況下實現GetHashCode的的對象你類存儲在散列容器中,如Dictionary<TKey,TValue>。如果您想進一步閱讀,請參閱MSDN for GetHashCode and Equals

+0

如果你自己編寫整個列表實現,你可以用任何你喜歡的方式來命名比較方法,因爲你是誰來調用它們。如果可能發生的事情是,你的對象最終在通用容器中,但你應該實現'IEquatable ',除了'object.Equals()'。參看https://msdn.microsoft.com/en-us/library/ms131187%28v=vs.110%29.aspx。你當然也應該實現'GetHashCode()'。 –

+0

@PeterSchneider當然你是對的,但我試圖保持簡單。我也添加了HashCode。 – HimBromBeere

+0

嗯......我認爲'GetHashCode()'只對字典和可能的其他散列容器很重要,但對於一般的相等性測試來說不重要。 –