我有一个类Author
的对象列表,我想根据作者的一个属性name
搜索这个作者列表,当我收到一个匹配时,我会喜欢返回用于创建另一个类的实例的Author
实例,它需要Author
作为其构造函数的一部分。
更好的解释方法是:
author getAuthor(String arg_name)
{
foreach (author auth in authorList)
{
if (auth.name == arg_name)
{
return auth;
}
}
}
虽然我意识到这个特定代码确实有效,但是有更好的方法来执行此操作吗?
答案 0 :(得分:7)
您可以使用Enumerable.FirstOrDefault
之类的:
return authorList.FirstOrDefault(a=> a.name == arg_name);
如果任何名称作者与传递的参数不匹配,则返回null
。
对于您的特定代码,您的检查if (auth == arg_name)
应该会给您编译时错误。您的支票应为if (auth.name == arg_name)
答案 1 :(得分:0)
假设public
中Name
属性为Author
,您应该能够获取其值并将其与请求的值进行比较(在您的情况下arg_name
})。一种方法是使用foreach
:
foreach (author auth as authorList)
{
if (auth.name == arg_name)
{
return auth;
}
}
另一种方法是使用Linq:
return authorList.FirstOrDefault(r=> r.name == arg_name);
答案 2 :(得分:0)
LINQ解决方案虽然小巧而优雅,但效率低下。您可以使用字典,从名称映射到列表内的索引。考虑到这个解决方案在添加/删除项目时效率很低,特别是如果它们是从列表中间添加/删除的话....考虑哪种解决方案更适合你