-3

我正在使用.Net 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;
    }
}
4

2 回答 2

1

我认为如果您使用高于 2.0 的 .Net 版本而不是使用 linq 来简单地从列表中获取您想要的对象,那将是非常好的。

但您可以使用委托和查找方法

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

可能是这样的

      MyContainerClass MyContainerObject  = MyList.Find(delegate(MyContainerClass p) {return
 BasicObject.Val == someval; });
于 2013-02-04T16:40:17.493 回答
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;
}
于 2013-02-04T16:32:18.223 回答