我想我必须遗漏一些C#如何工作的基本知识。 我在结构中有一个列表,用作字典的值。 但是,每当我向字典添加新对象时,已经存储在字典中的所有变量都会发生变化。 我显然创建了具有相同引用的对象,只是认为我不是:P,因此我不确定如何解决它。 以下是相关代码:
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DizClass diz = new DizClass();
Group tempG = new Group();
tempG.Category = 1;
tempG.Chiave = "A";
diz.Add(tempG);
tempG.Category = 2;
tempG.Chiave = "B";
diz.Add(tempG);
tempG.Category = 3;
tempG.Chiave = "A";
diz.Add(tempG);
diz.Print();
}
}
}
namespace WindowsFormsApp1
{
class Group
{
public string Chiave { get; set; }
public int Category { get; set; }
}
struct Host_Struct
{
public string variableStr;
public List<Group> lista;
}
class DizClass
{
Dictionary<string, Host_Struct> diz = new Dictionary<string, Host_Struct>();
public void Add(Group gr)
{
if (diz.ContainsKey(gr.Chiave))
{
diz[gr.Chiave].lista.Add(gr);
}
else
{
Host_Struct tempHS = new Host_Struct(){ lista = new List<Group>() { gr } };
diz.Add(gr.Chiave, tempHS);
}
}
public void Print() {
foreach (string Key in diz.Keys) foreach (Group val in diz[Key].lista) Debug.Print("{0} - {1}", Key, val.Category);
}
}
}
我希望获得:
我得到了:
提前感谢您的帮助。
答案 0 :(得分:2)
您使用面向对象。
您只创建一个对象并将该对象添加3次。
Group tempG = new Group();
...
diz.Add(tempG);
试试这个:
Group tempG1 = new Group();
tempG1.Category = 1;
tempG1.Chiave = "A";
diz.Add(tempG1);
Group tempG2 = new Group();
tempG2.Category = 2;
tempG2.Chiave = "B";
diz.Add(tempG2);
...
diz.Print();
我建议你阅读有关面向对象编程的内容。
答案 1 :(得分:1)
该列表仅存储对“Group”-Object的引用。您添加相同的“组”3次并在两者之间进行更改。
修正:
Group tempG = new Group();
tempG.Category = 1;
tempG.Chiave = "A";
diz.Add(tempG);
tempG = new Group();
tempG.Category = 2;
tempG.Chiave = "B";
diz.Add(tempG);
tempG = new Group();
tempG.Category = 3;
tempG.Chiave = "A";
diz.Add(tempG);