我试图在我的mCurrentSprite字典中修改一个值。问题是,当我试图通过键字符串mPartName访问它或设置它时,会得到一个错误。怎么解决这个问题呢?
mCurrentSprite[mPartName].r -= 0.1f;错误代码:无法修改
Dictionary<string, (float r, float g, float b)>.this[string]的返回值,因为它不是变量
发布于 2022-01-30 23:59:14
您有一个字典Dictionary<string, (float r, float g, float b)>,其值为元组。字典实际上返回值类型的值的副本。因此,您可以使用一个temp变量来更改值,并且需要将整个键赋值为tuple:
if(mCurrentSprite.TryGetValue(mPartName, out var tuple))
{
mCurrentSprite[mPartName] = (tuple.r - 0.1f, tuple.g, tuple.b);
}ValueTuples实际上是可变的,在这个小提琴中演示了这一点。文档状态:
System.ValueTuple类型是值类型。System.Tuple类型是引用类型。System.ValueTuple类型是可变的。System.Tuple类型是不变的。System.ValueTuple类型的数据成员是字段。System.Tuple类型的数据成员是属性。因此,可以将上述内容改写为:
if(mCurrentSprite.TryGetValue(mPartName, out var tuple))
{
tuple.r = tuple.r - 0.1f;
mCurrentSprite[mPartName] = tuple;
}https://stackoverflow.com/questions/70919732
复制相似问题