-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
var found = MyList.FirstOrDefault(o => o.BasicObject == someObject);

BasicObject が実装および/またはオーバーロードしない限り、IEquatable<BasicObject>効果的に終了することに注意してください。Equalsoperator==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 に答える
1

リストから目的のオブジェクトを取得するために linq を使用するよりも、.Net バージョン 2.0 よりも高いバージョンを使用している場合は、非常に優れていると思います。

ただし、デリゲートとfindメソッドを使用できます

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 に答える