基于C#中的变量从对象列表返回对象

时间:2014-03-03 20:29:52

标签: c# list

我有一个类Author的对象列表,我想根据作者的一个属性name搜索这个作者列表,当我收到一个匹配时,我会喜欢返回用于创建另一个类的实例的Author实例,它需要Author作为其构造函数的一部分。

更好的解释方法是:

author getAuthor(String arg_name)
{
  foreach (author auth in authorList)
  {
    if (auth.name == arg_name)
    {
      return auth;
    }
  }
}

虽然我意识到这个特定代码确实有效,但是有更好的方法来执行此操作吗?

3 个答案:

答案 0 :(得分:7)

您可以使用Enumerable.FirstOrDefault之类的:

return authorList.FirstOrDefault(a=> a.name == arg_name);

如果任何名称作者与传递的参数不匹配,则返回null

对于您的特定代码,您的检查if (auth == arg_name)应该会给您编译时错误。您的支票应为if (auth.name == arg_name)

答案 1 :(得分:0)

假设publicName属性为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解决方案虽然小巧而优雅,但效率低下。您可以使用字典,从名称映射到列表内的索引。考虑到这个解决方案在添加/删除项目时效率很低,特别是如果它们是从列表中间添加/删除的话....考虑哪种解决方案更适合你