Ala*_*ras 3 c# oop list object
问题是如何从List获取具有其字段值的对象
我有一个名为f_objects的列表,其中包含对象.
private List<F_object> f_objects;
Run Code Online (Sandbox Code Playgroud)
我还有一个有一些价值的字符串:
string name = "something";
Run Code Online (Sandbox Code Playgroud)
F_object有一个方法返回名为name的字段:
public string GetName()
{
return this.name;
}
Run Code Online (Sandbox Code Playgroud)
是否有内置的方法来比较列表中的对象与此字段值?或者我应该做一个循环并比较如下:
foreach(F_object ob in f_objects)
{
if String.Equals(name, ob.GetName())
F_object found = ob;
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ:
List<F_object> found = f_objects.Where(obj => obj.GetName() == name).ToList();
Run Code Online (Sandbox Code Playgroud)
这是所有匹配对象的列表.
编辑:符文FS的回答也有很好的建议,如果你期望或只关心抓住一个不同的值,使用.Single()或.First()代替.Where().
在linq中有多种方法可以做到这一点.首先是使用.Where.如果可以有更多匹配,这将满足您的需求
IEnumerable<F_object> result = f_objects.Where(obj=>obj.GetName() == name);
Run Code Online (Sandbox Code Playgroud)
第二个选项是,如果你只关心第一个命中,即使可能有多个,在这种情况下使用 .First
f_object result = f_objects.First(obj=>obj.GetName() == name);
Run Code Online (Sandbox Code Playgroud)
或者如果零点击是可接受的情况(非例外)
f_object result = f_objects.FirstOrDefault(Obj=>obj.GetName() == name);
Run Code Online (Sandbox Code Playgroud)
如果你只有一次击中然后使用 .Single
f_object result = f_objects.Single(obj=>obj.GetName() == name);
Run Code Online (Sandbox Code Playgroud)
或者如果你只有一个或零点击,那么使用 .SingleOrDefault
f_object result = f_objects.SingleOrDefault(obj=>obj.GetName() == name);
Run Code Online (Sandbox Code Playgroud)