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

方法内替代ValueTuple:无需单独类的可变引用类型分组方案

解决方案

1. 方法内定义本地类

在当前方法内部声明一个简单的引用类型类,仅在该方法范围内可见,无需单独创建文件:

// 方法内部定义本地类
private class RateRangePair
{
    public BalanceRateRange Range { get; set; }
    public Rate Rate { get; set; }
}

// 定义列表
List<RateRangePair> arr = new List<RateRangePair>();

// 修改属性的代码
arr.First(el => el.Range == rate.BalanceRateRange!).Rate = rate;

本地类完全符合“仅当前方法使用”的需求,且作为引用类型,修改其属性会直接作用于列表中的原对象,不会出现值类型副本的问题。

2. 方法内定义可变Record Class

如果偏好更简洁的语法,可以用C# 9及以上支持的本地record class(注意是record class而非默认的record struct,后者是值类型):

// 方法内部定义可变的record class
private record class RateRangePair(BalanceRateRange Range, Rate Rate)
{
    public BalanceRateRange Range { get; set; } = Range;
    public Rate Rate { get; set; } = Rate;
}

// 使用方式与本地类一致
List<RateRangePair> arr = new List<RateRangePair>();
arr.First(el => el.Range == rate.BalanceRateRange!).Rate = rate;

关于你的更新看法

C#目前确实没有内置的“本地可变引用类型元组”:ValueTuple从设计之初就是值类型,而匿名类型是引用类型但属性默认只读,无法修改。上述两种本地类型的方案,既不需要单独创建全局类,又能满足可变引用类型的需求,是当前最贴合场景的替代方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:13:28