You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#:方法参数场景下的空条件运算符简写方案问询

简化“找到非空项再添加到列表”的代码方案

嘿,这个问题提得很实用——我们确实经常遇到这种“找到东西才添加”的场景,原代码里两次调用Find不仅冗余,还可能影响性能(虽然List.Find是线性查找,小列表差异不大,但好习惯得养成)。先给你梳理几种更优的简写方式:

1. 先缓存查找结果(最直观的基础优化)

先把Find的结果存到变量里,避免重复调用,代码也更清晰:

var foundItem = anotherList.Find(somePredicate);
if (foundItem != null)
{
    someList.Add(foundItem);
}

这种方式的好处是:如果后续还要用到找到的foundItem,直接用变量就行,而且逻辑一目了然,新手也能快速理解。

2. 利用LINQ简化(一行搞定,无需额外扩展)

如果你熟悉LINQ,可以用Where+Take(1)配合AddRange,因为AddRange会处理空序列,不用手动判断null:

someList.AddRange(anotherList.Where(somePredicate).Take(1));

Where(somePredicate)会筛选出符合条件的所有项,Take(1)只取第一个(和Find的行为一致),如果没有符合条件的项,AddRange就什么都不做,完美替代原逻辑。

3. 结合空条件运算符+你的扩展方法(更简洁的一行写法)

你写的AddTo扩展方法其实已经很实用了,再结合C# 6+的空条件运算符?.,可以直接写成一行:

anotherList.Find(somePredicate)?.AddTo(someList);

如果Find返回null,?.会直接跳过后面的AddTo调用,完全符合你的需求,代码极简。

各方案对比

  • 缓存变量:适合需要复用查找结果的场景,可读性拉满。
  • LINQ方式:无需自定义扩展,依赖.NET内置方法,适合纯添加的场景。
  • 空条件+扩展:代码最简洁,和你的初始思路契合,适合已经有扩展方法的项目。

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

火山引擎 最新活动