在List中定位对象 [英] Locating object in List

查看:166
本文介绍了在List中定位对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 public class MyObj 
{
public string MyObjName;

public MyObj(string myObjName)
{
MyObjName = myObjName;
}
}

public static Main(string [] args)
{
List< MyObj> myObjs = new List< MyObj>();

myObjs.Add(new MyObj(Obj1));
myObjs.Add(new MyObj(Obj2));
myObjs.Add(new MyObj(Obj3));
//等等......
}





如果我想找一个特定的MyObj,例如(Obj100)在myObjs中,最快最有效的方法是什么?

解决方案

请使用 System.Collections考虑最简单的选项。 Generic.List< T> .Find

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx [ ^ ]。



除了Oleksandr Kulchytsky的正确答案,请参阅我对此的评论回答。



关于覆盖 System.Object.Equals 系统的事情。 Object.GetHashCode 并非如此简单。我看到即使是经验丰富的开发人员也很困惑。简短的解释是:它对于一些通过密钥提供访问的集合类很重要。有关更详细的说明,请参阅我最近的答案,最近更新:

C#.Net 中的Object.GetHashCode()方法[ ^ ]。



这很有趣,非常重要,请参阅。
-SA


  public   class  MyObj 
{
public String MyObjName;
public MyObj()
{

}
public MyObj( String myObjName)
{
MyObjName = myObjName;
}
public void Hello()
{
Console.Write(MyObjName);
}
}

静态 void Main( )
{
List< myobj> myObjs = new 列表< myobj>();
for int i = 1 ; i < 101 ; i ++)
{
myObjs.Add ( new MyObj( Obj +一世));
}


object obj1 = Activator.CreateInstance(Type.GetType( Delegate.MyObj)) as 字符串;
MethodInfo mi = obj1.GetType()。GetMethod( Hello);
mi.Invoke(obj1, null );

}
< / myobj > < / myobj >


所有覆盖方法的firs在您的类MyObj中等于并实现它逻辑。



要在你的列表中找到对象,你可以使用LINQ:



 myObjs.FisrtOrDefault( x => x.MyObjName.Equals(  obj100,StringComparisson.OrdinalIgnoreCase))


public class MyObj
{
   public string MyObjName;
   
   public MyObj(string myObjName)
   {
      MyObjName = myObjName;
   }
}

public static Main(string[] args)
{
   List<MyObj> myObjs = new List<MyObj>();
   
   myObjs.Add(new MyObj("Obj1"));
   myObjs.Add(new MyObj("Obj2"));
   myObjs.Add(new MyObj("Obj3"));
   // etc...
}



If I wanted to find a specific MyObj e.g.(Obj100) in myObjs what is the fastest and most efficient way to go about this?

解决方案

Please also consider the simplest option, using System.Collections.Generic.List<T>.Find:
http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx[^].

In addition to a correct answer by Oleksandr Kulchytsky, please see my comments to this answer.

The thing about overriding of System.Object.Equals and System.Object.GetHashCode is not so trivial. I saw even pretty experienced developers who were confused. Short explanation is: it''s important for some collection classes providing access by a key. For more detailed explanation, please see my past answer, recently updated:
Object.GetHashCode() Method in C#.Net[^].

This is interesting enough and very important to understand, please see.

Good luck,
—SA


    public class MyObj
    {
        public String MyObjName;
        public MyObj()
        {

        }
        public MyObj(String myObjName)
        {
            MyObjName = myObjName;
        }
        public void Hello()
        {
            Console.Write(MyObjName);
        }
    }
   
        static void Main()
        {
            List<myobj> myObjs = new List<myobj>();
            for (int i = 1; i < 101; i++)
            {
                myObjs.Add(new MyObj("Obj" + i));
            }


            object obj1 = Activator.CreateInstance(Type.GetType("Delegate.MyObj")) as String;
            MethodInfo mi = obj1.GetType().GetMethod("Hello");
            mi.Invoke(obj1, null);

        }
</myobj></myobj>


firs of all override method Equals and implement it logic in your class MyObj.

To find object in your''s list you can laverage LINQ:

myObjs.FisrtOrDefault(x=>x.MyObjName.Equals("obj100",StringComparisson.OrdinalIgnoreCase))


这篇关于在List中定位对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆