-3

I am using.Net 2.0

I have a generic

List< MyContainerObject > MyList;

and

MyContainerClass MyContainerObject = new MyContainerClass();

and

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

How can I search for BasicObject in MyList efficiently?

Sample Code added

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;
    }
}
sehe
  • 374,641
  • 47
  • 450
  • 633
bsobaid
  • 955
  • 1
  • 16
  • 36
  • 2
    Is it really so difficult to provide something that at least compiles? Even if it is just for demonstration purposes, you would show a minimum effort then. – Tim Schmelter Feb 04 '13 at 16:31
  • I don't understand what you mean by "search for BasicObject". Every item in MyList will have a BasicObject field. – itsme86 Feb 04 '13 at 16:32
  • What do you mean by "search" and "efficiently"? – lc. Feb 04 '13 at 16:32

2 Answers2

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

Note that unless BasicObject implement IEquatable<BasicObject> and/or overloads Equals/operator== you end up with object.ReferenceEquals(o.BasicObject, someObject) effectively.

Oops. .NET 2.0. Well:

BasicObject FindBy(List<MyContainerClass> list, BasicObject o)
{
     foreach (MyContainerClass i in list)
     {
          if (i.BasicObject == o) // same caveats on Equality
              return i;
     }
     return null;
}
sehe
  • 374,641
  • 47
  • 450
  • 633
  • 3
    .net 2.0 doesn't know much about linq... (not the downvoter by the way) – Raphaël Althaus Feb 04 '13 at 16:32
  • I missed that. That's not entirely true by the way. CLR and C# are versioned independently: http://stackoverflow.com/a/2147/85371 – sehe Feb 04 '13 at 16:34
  • LINQ would work in C# 2.0, but you'll have to ditch the extension methods and lambdas for the more verbose static method calls and anonymous delegates. – Etienne de Martel Feb 04 '13 at 17:00
1

I think it would be very nice if you would be using .Net version higher than 2.0 than you caould use the linq to simply get the object you want rom the list.

but you can use delegate and find method

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

could be something like

      MyContainerClass MyContainerObject  = MyList.Find(delegate(MyContainerClass p) {return
 BasicObject.Val == someval; });
COLD TOLD
  • 13,513
  • 3
  • 35
  • 52