2013-02-04 38 views
-3

我using.Net 2.0NET 2.0中的泛型列表搜索成員對象

我有一個通用的

List<MyContainerObject> MyList; 

MyContainerClass MyContainerObject = new MyContainerClass(); 

Public Class MyContainerClass 
{ 
    public BasicClass BasicObject; 
    public AdvanceClass AdvanceObject 
} 

如何有效地在MyList中搜索BasicObject?

示例代碼添加

namespace WindowsApplication4 
{ 
    public class Program 
    { 
     private List<ContainerClass> MyList; 
     public Program() 
     { 
      MyList = new List<ContainerClass>(); 
     } 

     private void Add(object sender, EventArgs e) 
     { 
      ContainerClass objContainer1 = new ContainerClass("B1","A1"); 
      ContainerClass objContainer1 = new ContainerClass("B2", "A2"); 
      MyList.Add(objContainer1); 
      MyList.Add(objContainer2);    
     } 
     private void Get(BasicClass objBasic) 
     { 
      //How to retreive ContainerClass from MyList that has objBasic ?? 
     } 
    } 

    public class ContainerClass 
    { 
     private BasicClass BasicObject; 
     private AdvancedClass AdvancedObject; 
     public ContainerClass(string baseID, string AdvanceID) 
     { 
      BasicObject = new BasicClass(); 
      BasicObject.ID = baseID; 
      AdvancedObject = new AdvancedClass(); 
      AdvancedObject.ID = AdvanceID; 
     } 

    } 

    public class BasicClass 
    { 
     public string ID; 
     public int name; 
    } 

    public class AdvancedClass 
    { 
     public string ID; 
     public int name; 
    } 
} 
+2

真的這麼難以提供的東西,至少編譯?即使它僅用於演示目的,您也會顯示最小的努力。 –

+0

我不明白你的意思是「搜索BasicObject」。 MyList中的每個項目都有一個BasicObject字段。 – itsme86

+0

「搜索」和「有效」是什麼意思? –

回答

1
var found = MyList.FirstOrDefault(o => o.BasicObject == someObject); 

需要注意的是,除非BasicObject實現IEquatable<BasicObject>和/或過載Equals/operator==你結束了object.ReferenceEquals(o.BasicObject, someObject)有效。

糟糕。 .NET 2.0。好:

BasicObject FindBy(List<MyContainerClass> list, BasicObject o) 
{ 
    foreach (MyContainerClass i in list) 
    { 
      if (i.BasicObject == o) // same caveats on Equality 
       return i; 
    } 
    return null; 
} 
+3

.net 2.0對linq不太瞭解...(順便說一下,不是downvoter) –

+0

我錯過了。這並不完全正確。 CLR和C#獨立版本:http://stackoverflow.com/a/2147/85371 – sehe

+0

此外,顯示C#2.0版本 – sehe

1

我認爲這將是非常好的,如果你會使用.NET版本高於2.0比你caould使用LINQ簡單地得到你想要的ROM列表中的對象。

但你可以使用委託,並找到方法

http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx

就應該像這樣

 MyContainerClass MyContainerObject = MyList.Find(delegate(MyContainerClass p) {return 
BasicObject.Val == someval; });