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)
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
。