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

C# 9+是否有更简洁语法创建记录/元组以传递多对象作为单个参数

C# 9及以上版本有多种更简洁的实现方式,可选方案如下:

  • 方案1:使用值元组(ValueTuple)简化传参和类型转换
    不用再手动实例化Tuple<>类,直接使用值元组字面量传参,还支持直接解构得到两个对象,代码比原实现简洁很多:
ThreadPool.QueueUserWorkItem(o =>
{
    // 直接解构为两个对象,无需逐个访问Item属性
    var (item1, item2) = (ValueTuple<MyObject, MyObject2>)o;
    // 后续直接使用item1、item2即可
},
// 直接写值元组字面量,无需new Tuple<>构造
(item1, item2));
  • 方案2:直接通过lambda捕获外部变量(最简洁,无类型转换开销)
    如果item1和item2在调用QueueUserWorkItem的作用域内不会被后续逻辑意外修改,直接用lambda捕获外部变量即可,完全不需要做参数传递和类型转换:
ThreadPool.QueueUserWorkItem(_ =>
{
    // 直接使用外部作用域的item1、item2,无需任何转换
});
  • 方案3:配合泛型重载避免装箱拆箱(.NET 5+/C# 9+适用)
    如果使用的是.NET 5及以上版本,框架自带泛型版QueueUserWorkItem重载,无需将参数装箱为object,配合值元组使用性能更高、写法更简洁:
ThreadPool.QueueUserWorkItem(state =>
{
    var (item1, item2) = state;
},
(item1, item2),
// 最后一个参数表示是否流动执行上下文,不需要可传false降低开销
false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:03