方法内替代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
相关产品推荐
相关产品推荐

