无法修改'Selectable.Colors'的返回值,因为它不是变量

时间:2018-01-06 21:58:00

标签: c#

有许多类似我的问题,(abcdef)但没人答案正确...此代码有效:

ColorBlock c = ButtonLeft.colors;
c.normalColor = LeftNormal;
c.highlightedColor = LeftPressed;

如果我想避免变量,我试试这个:

ButtonLeft.colors.normalColor = LeftNormal;
ButtonLeft.colors.highlightedColor = LeftPressed;

但它不适用于错误:

Impossible to modify the return value of 'Selectable.Colors' because it's not a variable.

这是什么意思?为什么我不能这样做?接下来的问题永远不会回答:什么时候我应该知道我的代码不会工作而我需要使用变量

1 个答案:

答案 0 :(得分:1)

错误的根本原因是structcolors,即值类型

当您访问ButtonLeft的{​​{1}}属性时,会生成struct的副本,即ButtonLeft.colorsColorBlockButtonLeft的副本}}。虽然colors属性的赋值在理论上可以成功,但它们对colors内的ButtonLeft没有影响,这肯定是一个编程错误。这就是语言触发错误,禁止分配的原因。

这就是为什么你需要以documentation描述的方式使用ClolrBlock

ColorBlock cb = ButtonLeft.colors;
cb.normalColor = newColor;
button.colors = cb;