2 回答
TA贡献1828条经验 获得超13个赞
调试器和观察器无法从索引器运算符 [] 推断 Item1 是什么,因此在观察器中将为您提供 null。但是一旦你运行代码,它就可以很好地用于阅读目的。为了写作目的,您需要取出整个元组,对其进行编辑并重新插入字典中:
static void Main(string[] args) { Dictionary<int, (string, string)> arenaIdToSetAndNumber = new Dictionary<int, (string, string)>() { { 70506, ("c16", "337") }, { 70507, ("c16", "340") }, { 70508, ("c16", "343") }, { 70509, ("c16", "346") }, { 70510, ("c16", "349") }, }; var myTuple = arenaIdToSetAndNumber[70509]; myTuple.Item1 = "c18"; arenaIdToSetAndNumber[70509] = myTuple; //System.Console.WriteLine(arenaIdToSetAndNumber[70509].Item1); // This prints c18 }
否则,在一行中,只需重新创建整个元组:
arenaIdToSetAndNumber[70509] = ("c18", arenaIdToSetAndNumber[70509].Item2);
所有这一切都是因为 ValueTuple 是一个结构。
TA贡献1825条经验 获得超4个赞
这不使用元组,但解决了您的问题。由于您想要读取值,请创建一个不可变的类,因此请使用属性来检索值。
public class Contents
{
private readonly string leftValue;
private readonly string rightValue;
public Contents(string aLeftValue, string aRightValue)
{
leftValue = aLeftValue;
rightValue = aRightValue;
}
public string LeftValue => leftValue;
public string RightValue => rightValue;
}
修改您的代码以使用新类。
Dictionary<int, Contents> arenaIdToSetAndNumber = new Dictionary<int, Contents>()
{
{ 70506, new Contents("c16", "337") },
{ 70507, new Contents("c16", "340") },
{ 70508, new Contents("c16", "343") },
{ 70509, new Contents("c16", "346") },
{ 70510, new Contents("c16", "349") },
};
你可以用这个来测试它。
var content = arenaIdToSetAndNumber[70506];
string leftValue = content.LeftValue;
string rightValue = content.RightValue;
希望这能解决您的问题。
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报