在List中定位对象 [英] Locating object in List
本文介绍了在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, usingSystem.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 ofSystem.Object.Equals
andSystem.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屋!
查看全文