gpt4 book ai didi

c# - C# 中的链接属性和意外结果

转载 作者:行者123 更新时间:2023-11-30 20:12:52 25 4
gpt4 key购买 nike

我只是快速浏览了一遍 this article (特别是关于他为什么选择使用结构/字段而不是类/属性的部分)并看到了这一行:

The result of a property is not a true l-value so we cannot do something like Vertex.Normal.dx = 0. The chaining of properties gives very unexpected results.

他说的是什么意想不到的结果?

最佳答案

我想补充 dbemerlin 的回答,这里的关键是 Rico 的注释,属性 不是“左值”,或者我们在 C# 中称它们为“变量”。

为了改变一个可变结构(理想情况下,你不应该这样做;可变结构通常会导致比它们解决的问题更多的问题),你需要改变一个变量。这就是变量——一个内容会改变的存储位置。如果你有一个向量类型的字段,你说

Foo.vector.x = 123;

然后我们有一个值类型的变量——字段 Foo.vector——因此我们可以改变它的属性 x。但是如果你有一个值类型的属性:

Foo.Vector.x = 123;

属性 不是变量。这相当于

Vector v = Foo.Vector;
v.x = 123;

它会改变临时变量 v,而不是支持该属性的任何存储位置。

如果您放弃可变值类型,整个问题就会消失。要更改 x,请使用新值创建一个新向量并替换整个向量:

Foo.Vector = new Vector(x, Foo.Vector.y);

关于c# - C# 中的链接属性和意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2132594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com