C# 引用类型替代值类型

C# Reference Type alternatives to Value Types

我知道有不同的帖子与围绕该主题的问题相关,但我找不到关于我的问题的任何来源。

在某些情况下,如果值类型表现为引用类型,即它们可以在另一个方法中被修改,那将会容易得多。 例如我想跟踪一些 int 类型的值类型并将其中的几个传递给一个方法,并且该方法可能会修改它们。让我们假设,在执行该方法后,我将需要在调用方使用更新后的值。当然有多种方法可以实现这一点,但问题是将那些 integers 传递给方法会简单得多,可以 return void,但我们仍然得到这些 integers 的更新值,因为我们持有引用。

据我所知,在 C# 中没有这样的 wrappers/classes 表示与值类型相同的体验,但却是引用类型。 (例如对于 int,包装器仍应执行 ++、--,具有相同的范围等)

所以我的问题是为什么语言中没有这样的选择?我的假设是因为模棱两可,并且有一种直接的方式来做事。为了摆脱比较两个不同类型的相等值等的一些小麻烦。如果有人真的需要它,he/she 可以实现它。

你对这个话题有什么看法?为什么语言不应该有那种值类型的包装器?

For example I want to track some value types of type int and pass several of them to a method, and that method may modify them.

注意 “几个” 的强调。这是创建对象的绝好机会。所以不是这个:

UpdateValues(value, anotherVal, 12, someString, etc);

你会得到这个:

UpdateValues(valuesToUpdate);

您在该方法中设置的那个对象上的任何 属性 确实会反映在对象本身上。因为该对象只有一个实例。您不是在为变量设置值,而是在引用上更新 属性。

基本上,不是传递裸值,而是组成有意义的对象并使用它们。这些对象可以填充您喜欢的所有业务逻辑,可以按照您喜欢的任何方式进行修改,等等。


至于关于为什么一种语言具有或不具有您个人可能希望它具有的任何给定功能的争论和意见...

我们可以花一整天的时间来想出人为的例子,争论它的必要性,它是否会使代码更简单或更复杂,其他利弊等等。但是有人在主要语言上工作 has already said it better。解释一下这个问题:

That's the wrong question to ask. Instead, ask: "Is there a compelling reason to implement and support this feature?" If there isn't, none of the rules for supporting this feature needed to be thought of, argued about, designed, specified, implemented, tested, documented, shipped to customers, or made compatible with every future feature of C#. That is a significant cost savings.