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

LINQ代码优化:如何消除Select所需FUNC<int,T>带来的无用变量?

解决LINQ Select中冗余未使用变量的问题

嘿,这个场景我太熟悉了——有时候用LINQ方法链写Select时,明明不需要用到源集合的元素,却被迫声明一个完全没用的变量,看着特别别扭!咱们来用几种简洁的方式消除这个冗余,同时保持代码的可读性:

方案1:用查询语法(你偏好的清晰写法)

既然你觉得查询语法更直观,那直接用**下划线_**作为迭代变量就行,这是C#里约定俗成表示“此变量无需使用”的写法:

// 假设原来的冗余代码是这样的:
var result = myIntCollection.Select(x => new MyTargetClass());

// 改成查询语法,用下划线明确标记未使用的变量
var result = from _ in myIntCollection
             select new MyTargetClass();

这种写法一眼就能让阅读者明白:我们只是需要基于源集合的元素数量生成对应数量的新对象,完全不需要用到源元素本身。

方案2:方法链中使用丢弃变量

如果你更习惯流式的方法链写法,同样可以用下划线作为Select的参数名,效果和查询语法一样清晰:

var result = myIntCollection.Select(_ => new MyTargetClass());

这里的_明确传达了“这个参数是故意忽略的”,比用x、temp这类无意义的变量名更具语义性。

额外小提示

如果这种“忽略源元素生成新对象”的操作在你的代码里频繁出现,还可以封装一个扩展方法来进一步简化:

public static IEnumerable<TResult> SelectIgnoringSource<TSource, TResult>(
    this IEnumerable<TSource> source, 
    Func<TResult> selector)
{
    foreach (var _ in source)
    {
        yield return selector();
    }
}

// 使用时就不用写下划线了:
var result = myIntCollection.SelectIgnoringSource(() => new MyTargetClass());

不过这个扩展方法属于“锦上添花”,如果只是偶尔用到,前面两种方案已经足够简洁。

总的来说,用下划线标记未使用的变量是最通用、最易读的解决方案,不管是查询语法还是方法链都适用,完美消除冗余的同时也保持了代码的清晰度!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:54:10