C# 为什么要为字典添加新值<&燃气轮机;覆盖其中以前的值

C# 为什么要为字典添加新值<&燃气轮机;覆盖其中以前的值,c#,dictionary,C#,Dictionary,我一直在用C#的字典处理这个问题。每当我添加一个条目时,字典中的所有条目都用相同的值填充。代码如下: using System; using System.Collections.Generic; namespace TESTING { class Program { /*--------------------Variable Declaration------------------------*/ public static int Num

我一直在用C#的字典处理这个问题。每当我添加一个条目时,字典中的所有条目都用相同的值填充。代码如下:

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));