我找到了这个方法:
public async Task SomeMethod(IEnumerable<Member> members)
{
await DoSomething(members.First());
await DoSomethingElse(members.First());
}
它被这样称呼:
List<Member> members = GetMembers();
await SomeMethod(members);
GetMembers()
我知道如果返回一个,这可能会特别糟糕IQueryable<Member>
,但由于它只是一个,这样List<Member>
调用两次仍然不好吗?First()
最好的做法是调用First()
一次并将结果存储在变量中吗?
First
函数于System.Linq.Enumerable
以下是功能的实现
System.Linq.Enumerable
方式:First
TryGetFirst
被叫了,我们来看一下:然后就
TryGetFirstNonIterator
被调用了,我们来看一下:正如我们所看到的,如果源是 ,它确实返回 list[0]
IList<TSource>
。 源代码建议
SomeMethod
不管如何
First
实施。你问的问题:我认为超载就是你所需要的。
是的,因为你不知道该方法将如何使用。即使今天仅与列表一起使用,明天也可能有人会做其他事情。就像这样调用它:
在这种情况下,每次调用
.First()
都需要运行VeryExpensiveFunction()
。将结果存储在变量中是一个很好的解决方案,或者您可以将该方法声明为
SomeMethod(List<Member> members)
, 或SomeMethod(IReadOnlyList<Member> members)
,以防您实际上需要多次迭代它。