首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以"Dictionary<string,(float r,float g,float b)“的形式修改dict的值?

如何以"Dictionary<string,(float r,float g,float b)“的形式修改dict的值?
EN

Stack Overflow用户
提问于 2022-01-30 23:05:37
回答 1查看 86关注 0票数 0

我试图在我的mCurrentSprite字典中修改一个值。问题是,当我试图通过键字符串mPartName访问它或设置它时,会得到一个错误。怎么解决这个问题呢?

代码语言:javascript
复制
mCurrentSprite[mPartName].r -= 0.1f;

错误代码:无法修改Dictionary<string, (float r, float g, float b)>.this[string]的返回值,因为它不是变量

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-30 23:59:14

您有一个字典Dictionary<string, (float r, float g, float b)>,其值为元组。字典实际上返回值类型的值的副本。因此,您可以使用一个temp变量来更改值,并且需要将整个键赋值为tuple:

代码语言:javascript
复制
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类型的数据成员是属性。

因此,可以将上述内容改写为:

代码语言:javascript
复制
if(mCurrentSprite.TryGetValue(mPartName, out var tuple))
{
    tuple.r = tuple.r - 0.1f;
    mCurrentSprite[mPartName] = tuple;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70919732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档