sma*_*man 21 c# oop tuples .net-4.0 c#-4.0
我是.NET 4.0的Tuple类的忠实粉丝.
元组中的所有项都是不可变的.有明显的情况这是有益的(最明显的是当元组用于表示没有声明的临时ValueType时).
但是,我有一些用例,我可以看到具有setter的元组项目的好处(除了TRest
Type 中的Type参数Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
).鉴于我可以访问源代码和Matt Ellis关于"构建元组"的文章,看起来实现这样一个很简单MutableTuple<T1,T2,TEtc>
.
微软显然决定使其Tuple
不可变. 我是否有理由忽视我不应该使用可变的非元组项创建替代实现?
Ree*_*sey 24
在我看来,这些Tuple
类通常只应用于表示短期场景中的数据,并且仅用于内部实现细节.例如,它们在重构期间从私有方法返回多个值时提供了便利.
一旦值成为公共API的一部分,或者更长时间在API中变得更长,我个人认为从可维护性的角度来看,使用包含所需的确切属性的自定义类或结构会变得更好名.
因此 - 根据定义,"可变元组"几乎就是为了拥有更长的生命周期而创建的东西 - 如果你要创建它,然后改变它,你就会有效地说这个对象存在是为了一个目的.我建议使用自定义类来保存此数据,因为它在可维护性方面提供了许多优势,包括:
特别是第二点,随着时间的推移变得非常重要 - 如果你要改变数据,你可能必须在某个时候验证它以验证值是否合适.如果使用元组,则此验证必须在包含数据的类之外进行,这可能会大大降低代码的可维护性.