c# - 为什么我应该避免在 C# 中创建 MutableTuple<T1,T2,TEtc> 类?

标签 c# oop c#-4.0 .net-4.0 tuples

我是 .NET 4.0 的忠实粉丝 Tuple classes .

元组中的所有项目都是不可变的。显然在某些情况下这是有益的(最明显的是当元组用于表示没有声明的临时 ValueType 时)。

但是,在一些用例中,我可以看到具有 setter 的元组项的好处(TRest 中的 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 类型参数除外)。鉴于我可以访问源代码和 Matt Ellis's article on "Building Tuple" , 看起来实现这样的 MutableTuple<T1,T2,TEtc> 会很简单.

Microsoft 显然决定制作 Tuple不可变的。 有什么原因让我忽略了我不应该使用可变的非元组项创建替代实现吗?

最佳答案

在我看来,Tuple 类通常应该只用于表示短期场景中的数据,并且只用于内部实现细节。例如,它们在重构期间从私有(private)方法返回多个值时提供便利。

一旦值成为公共(public) API 的一部分,或者在 API 中的生命周期更长,我个人认为从可维护性的角度来看,使用包含您需要的确切属性的自定义类或结构会变得更好, 具有适当的名称。

因此 - 根据定义,“可变元组”几乎是为了拥有更长的生命周期而创建的东西 - 如果你要创建它,然后再改变它,你实际上是在说该对象的存在是有目的的。那时我会推荐一个自定义类来保存这些数据,因为它在可维护性方面提供了许多优势,包括:

  • 正确命名变量
  • 能够在包含数据的类中添加验证

尤其是第二点,随着时间的推移变得非常重要 - 如果您要改变数据,您可能必须在某个时候验证它以验证值是否合适。如果您使用元组,则此验证必须在包含数据的类之外进行,这可能会大大降低代码的可维护性。

关于c# - 为什么我应该避免在 C# 中创建 MutableTuple<T1,T2,TEtc> 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5955049/

相关文章:

c# - 从 Azure 表存储获取 1000 多个数据集

c# - 是否有更优雅的形式将 NULL 分配给 InsertCommand 的 NVarChar?

c# - xsd.exe 自动实现的属性

类的 Java OOP 实例

php - 如何在php中使用命名空间类

visual-studio-2010 - 如何获取共享 COM Office 加载项中当前文件的路径?

c# - 如何使用动态扩展 c# 4.0 中的现有对象

c# - MVC5/WEB API 2 将 Home ApiController 路由到/api/home 而不是/home api

.net - 为什么静态类只能有静态成员?

asp.net-mvc-3 - 如果填充了另一个字段,则 MVC 3 字段为必填字段