C#为foreach搜索提供了更优雅的替代

本文关键字:foreach 搜索 | 更新日期: 2023-09-27 18:27:51

这是类中方法的整体:

public Foo GetFooByInfoName(string name)
{
    Debug.Assert(name != null, "name is not an optional argument");
    foreach (Foo f in storedFoos.Values)
    {
        if (name.Equals(f.FooInfo.Name))
        {
            return f;
        }
    }
    return null;
}

我显然已经更改了名称,所以假设FooInfo是必需的,并且Name不能简单地成为类Foo的属性。

有没有更优雅的方法来写这种方法?我对C#不是很熟悉,但我觉得有一个扩展方法或其他东西可以把这个方法变成2行。

注意,我在寻找可读性,这不是减少行数的竞赛。我只是认为,如果C#有办法在一行中搜索命名的Foo,那么这个方法会更清楚。

(我使用的是C#3.5)

C#为foreach搜索提供了更优雅的替代

return storedFoos.FirstOrDefault(f => name == f.FooInfo.Name);

你需要确保你是using System.Linq

顺便说一句,C#重写字符串的==运算符,因此通常更容易使用==而不是.Equals(可读性更强,更惯用的C#)。

您考虑过LINQ吗?

storedFoos.FirstOrDefault( f => name.Equals (f.Name));

您可以使用Linq:

var foo = storedFoos.FirstOrDefault(f => f.Name == f.FooInfo.Name);

http://msdn.microsoft.com/en-us/library/bb397926.aspx

您可以使用linq这样写:

public Foo GetFooByInfoName(string name)
{
    Debug.Assert(name != null, "name is not an optional argument");
    var f = storedFoos.Values.Where(x => x.FooInfo.Name == name)
                              .FirstOrDefault()//gets the first value or null
    return f;
}

注意:确保顶部有一个using System.Linq