You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当IEnumerable<Member>实际为List时,多次调用First()是否合理?是否应存变量?

多次调用List.First()是否有不妥?是否该存入变量?

先看你提供的代码示例:

方法实现:

public async Task SomeMethod(IEnumerable<Member> members)
{
    await DoSomething(members.First());
    await DoSomethingElse(members.First());
}

调用方式:

List<Member> members = GetMembers();
await SomeMethod(members);

针对你的问题,分两部分说明:

1. 针对List场景,多次调用First()的直接影响

对于List<T>来说,First()方法是直接访问内部数组的第一个元素,属于O(1)的常量时间操作,性能上几乎没有额外开销,不会像IQueryable<T>那样触发多次数据库查询。所以从纯功能和当前性能角度,这么写不会出问题。

2. 为什么存入变量是更佳实践

虽然当前场景没问题,但把First()的结果存入变量是更稳妥的做法,原因如下:

  • 可读性更强:给变量起一个有意义的名字(比如firstMember),能让代码意图更清晰,后续维护的人一眼就能知道这个变量的用途。
  • 维护成本更低:如果后续需要修改获取逻辑(比如改成FirstOrDefault()加空值判断,或者换用Single()),只需要修改一次变量赋值的地方,不用在多个地方重复修改,减少出错概率。
  • 方法健壮性更好:你的方法参数是IEnumerable<Member>,虽然现在调用方传的是List,但未来如果有其他调用方传入一个惰性枚举的IEnumerable(比如自定义迭代器、LINQ延迟查询的结果),多次调用First()会触发多次枚举,可能导致重复计算、数据不一致甚至性能问题。存入变量能避免这种潜在风险。

总结

哪怕当前用的是List,将First()的结果存入变量依然是最佳实践——它不会带来任何性能损失,却能提升代码的可读性、可维护性和方法的健壮性。

内容的提问来源于stack exchange,提问作者David Klempfner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:12:38