2012-02-22 86 views
0

我有一個包含很多對象的列表。我想在列表中找到一個對象,每個屬性等於列表中的一個對象。 例如:找到一個對象在基於其他對象的列表

list.Add(object1,object2,object3,object4); 
// for example I want found object3 
//list.find(object3) 

,我有一個問題,我必須檢查,除了每一個它的屬性。例如對象具有此屬性(int prop1,int prop2,int prop3)。我想找到prop1和prop2與列表中的任何項目相等的對象;

回答

2

重寫Equals方法將是一種方法。

或者你可以嘗試編寫一個查找功能使用反射動態檢查這些對象的屬性。

請點擊此處查看文章:http://www.sidesofmarch.com/index.php/archive/2007/08/03/use-reflection-to-compare-the-properties-of-two-objects/

+0

我不應該使用for或任何循環來實現平等或查找函數。如果我重寫或寫任何方法,我必須使用循環。感謝您的關注。真誠的你M.Bagheri – 2012-02-22 06:48:07

1

因此,看來你想了解名單的包含的方法來爲你工作。

看一看這裏:MSDN List.Contains

根據它,你可以在你的對象實現IEquatable做到這一點。

希望有所幫助。 乾杯 Sascha

+0

感謝您的關注和出色的答覆。這對我來說非常好,但是當我使用這個命令時,我的代碼不會調用Equals方法。我正在使用一個動態變量到我的列表中,這種類型可能會導致問題。 – 2012-02-22 07:47:58

+0

Contains-Method將自動調用該方法來檢查對象是否已經在列表中。你是否在你的Equals中設置了一個斷點,看它是否被調用? – 2012-02-22 09:42:50

+0

動態並不容易處理Equals。對於類型對象,執行如下操作時不存在任何問題: public override bool Equals(object other) var pi = other.GetType()。GetProperty(「Test」); var value = pi.GetValue(other,null); return(value.ToString()== Test); } – 2012-02-22 09:54:57

0

總是有Linq做事的方式。例如:

var haystack = new List<Tuple<int, bool, string>>() 
     { 
      new Tuple<int, bool, string>(1, true, "one"), 
      new Tuple<int, bool, string>(2, false, "two"), 
      new Tuple<int, bool, string>(3, true, "three"), 
      new Tuple<int, bool, string>(4, true, "four") 
     }; 

var needle = new Tuple<int, bool, string>(3, true, "three"); 
var found = 
    haystack.FirstOrDefault(
     t => t.Item1 == needle.Item1 && t.Item2 == needle.Item2 && t.Item3 == needle.Item3); 
Assert.AreSame(haystack[2], found); 

Assert.AreSame測試通過,當我運行這個。

相關問題