C# 为什么要为字典添加新值<&燃气轮机;覆盖其中以前的值
我一直在用C#的字典处理这个问题。每当我添加一个条目时,字典中的所有条目都用相同的值填充。代码如下:C# 为什么要为字典添加新值<&燃气轮机;覆盖其中以前的值,c#,dictionary,C#,Dictionary,我一直在用C#的字典处理这个问题。每当我添加一个条目时,字典中的所有条目都用相同的值填充。代码如下: using System; using System.Collections.Generic; namespace TESTING { class Program { /*--------------------Variable Declaration------------------------*/ public static int Num
using System;
using System.Collections.Generic;
namespace TESTING
{
class Program
{
/*--------------------Variable Declaration------------------------*/
public static int NumberOfPlayers = 5;
public static Dictionary<int, bool> PlayerAI = new Dictionary<int, bool>();
public static Dictionary<int, Dictionary<string, int>> Players = new Dictionary<int, Dictionary<string, int>>();
/*----------------------------------------------------------------*/
public static void Main(string[] args)
{
Dictionary<string, int> TMP = new Dictionary<string, int>();
for (int i = 0; i < NumberOfPlayers; i++)
{
Console.WriteLine(i);
TMP.Clear();
TMP.Add("Player Target", 0 + (i * 3));
TMP.Add("Player Cash", 0 + (i * 3));
TMP.Add("Player Savings", 0 + (i * 3));
TMP.Add("Borrow Interest", 0 + (i * 3));
Console.WriteLine(i);
Players.Add(i, TMP);
Console.WriteLine(i);
}
//----------------------------DEBUG
for (int i = 0; i < NumberOfPlayers; i++)
{
Console.WriteLine(i);
Dictionary<string, int> PVT = new Dictionary<string, int>();
PVT = Players[i];
Console.WriteLine(PVT["Player Target"]);
Console.WriteLine(PVT["Player Cash"]);
Console.WriteLine(PVT["Player Savings"]);
Console.WriteLine(PVT["Borrow Interest"]);
}
//------------------------------------
Console.ReadKey();
}
}
}
使用系统;
使用System.Collections.Generic;
命名空间测试
{
班级计划
{
/*--------------------变量声明------------------------*/
公共静态int NumberOfPlayers=5;
public static Dictionary PlayerAI=new Dictionary();
public static Dictionary Players=new Dictionary();
/*----------------------------------------------------------------*/
公共静态void Main(字符串[]args)
{
Dictionary TMP=新字典();
for(int i=0;i
`
以下是输出:
您只创建了一个具有
Dictionary<string, int> TMP = new Dictionary<string, int>();
等等。您在
播放器
中使用相同的词典
。字典将只存储引用。您需要创建一个新的字典
并存储该引用。字典是引用类型。当您更改TMP
时,您更改了所有引用,而不仅仅是该特定loopWell中的引用,您的字典中有一个对TMP字典的引用,如果您在将其添加到播放器的循环中重新创建它,您就不会遇到与此问题相关的问题。非常感谢!!这个问题已经困扰我好几个星期了。
for (int i = 0; i < NumberOfPlayers; i++)
{
Console.WriteLine(i);
Dictionary<string, int> TMP = new Dictionary<string, int>();
TMP.Add("Player Target", 0 + (i * 3));