gpt4 book ai didi

c# - 直接设置字典元组值

转载 作者:行者123 更新时间:2023-12-05 03:41:56 24 4
gpt4 key购买 nike

是否可以做类似的事情:dictTupleTest[key].Item1 = toggle;在以下情况下?

Dictionary<int, (bool, bool)> dictTupleTest = new Dictionary<int, (bool, bool)>();
var key = 3;
var toggle = false;

dictTupleTest.Add(key, (true, false));

//This works
dictTupleTest[key] = (toggle, dictTupleTest[key].Item2);

//While this gives an error
dictTupleTest[key].Item1 = toggle;

错误:Error CS1612: Cannot modify the return value of 'Dictionary<int, (bool, bool)>.this[int]' because it is not a variable.

或者有更好的方法吗?

最佳答案

元组是不可变的;它存储在字典中的事实是无关紧要的。你会得到同样的错误:

var x = dictTupleTest[key];
x.Item1 = toggle;

如果您想更改其中一个值,则不要使用元组 - 使用可变类。否则,您的做法是合适的(保留第二个值)。

编辑 -

感谢 Theodor Zoulias 指出我的推理有缺陷。元组是可变的,但出于某种原因(我不确定为什么),您不能更改与字典访问器内联的元组的属性。当您尝试对返回值(如 dictTupleTest[key]++)使用突变运算符时,该错误更为常见,但我不明白为什么要调用属性 set 不应被允许。

在任何情况下,将结果分配给变量有效:

dictTupleTest.Add(key, (true, false));
var x = dictTupleTest[key];
x.Item1 = false;

Console.WriteLine(dictTupleTest[key]); // outputs (false, false)

关于c# - 直接设置字典元组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67493403/

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