【发布时间】:2020-06-30 13:54:51
【问题描述】:
我想在 C# 核心中设置一个与其他对象值相等的对象,而不是通过引用!
x.len=10;
val y=x;
y.len=x.len*2;
我希望 y.len 设置为 20 和 x.len 保持不变,但 y.len 和 x.len 都是 20,我正在寻找断开x 和y 的方法。
我记得在 VB6 中我们有类似 ByRef 和 ByVal 的东西,它们让我们能够控制这个东西,有没有类似的C# Core 3.x 中的东西?
【问题讨论】:
-
听起来你想要一个值类型而不是引用类型。您在这里没有显示任何类型,但如果
x和y是对同一个对象的引用,您将获得您想要的效果。请注意,这与传递引用和传递值完全不同,后者是关于如何处理方法参数/参数。 -
次要问题:没有“C# Core 3.x”之类的东西 - 有 .NET Core 3.x(即将被 .NET 5.x 取代),还有“C# xy” (目前在 C# 8.*),但没有“C# Core”;但是,是的,C# 和 .NET 具有一系列 by-val 和 by-ref 语义,包括常规 vs ref-locals、pass-by-value vs pass-by-ref 参数,以及 value-types vs reference-types,但它如果没有更多关于您在这个特定示例中实际执行的示例,就不可能知道什么适用;最重要的是:“什么是 x?”
-
我找到了最好的解决方案here作为扩展方法
-
您找到的解决方案是使用反射,但它对于各种复杂对象都失败了,检查粘贴在链接中的代码的 git 存储库问题
标签: c# asp.net-core pass-by-reference pass-by-value