我不是那么伟大的程序员,但我正在尝试使用 C# 制作自定义 Minecraft 启动器。Soo 我有一个用于加载和保存选项的类 - 效果很好 - 但现在我有一个问题,即 1 个类中的 2 个变量以某种方式指向 1 个地址。我可以从 3 个不同的包中进行选择,每个包都有单独的选项。我可以加载和保存 RAM、调试模式、版本选择模式和自定义版本。但是MODE和VERSION指向同一个地址,所以如果我改变一个,另一个也会改变,但不知道为什么,你能帮我吗?
保存选项时会发生什么
//Setting stream to beggining
optstr.Position = 0;
//Loading options file from the disc
opt = formatter.Deserialize(optstr) as ObjOptions;
//Setting version
opt.version[modpack] = comboBox1.SelectedIndex;
//Setting mode
if (radioButton1.Checked) opt.mode[modpack] = 0;
else if (radioButton2.Checked) opt.mode[modpack] = 1;
else opt.mode[modpack] = 2;
//Setting debug
opt.debug[modpack] = debug.Checked;
//Setting memory
opt.memory[modpack] = Convert.ToInt16(ram.Text);
//Setting stream position
optstr.Position = 0;
//Writing to file
formatter.Serialize(optstr, opt);
//Closing options window
this.Dispose();
ObjOptions 类
[Serializable]
class ObjOptions
{
public List<int> version;
public List<int> mode;
public List<int> memory;
public List<bool> debug;
public ObjOptions(List<int> version, List<int> mode, List<int> memory, List<bool> debug)
{
this.version = version;
this.mode = mode;
this.memory = memory;
this.debug = debug;
}
public ObjOptions()
{
List<int> l1 = new List<int>();
for (int i = 0; i < 3; i++)
l1.Add(0);
List<int> l2 = new List<int>();
for (int i = 0; i < 3; i++)
l2.Add(0);
List<int> l3 = new List<int>();
for (int i = 0; i < 3; i++)
l3.Add(1024);
List<bool> l4 = new List<bool>();
for (int i = 0; i < 3; i++)
l4.Add(false);
this.version = l1;
this.mode = l2;
this.memory = l3;
this.debug = l4;
}
}
如果您发现任何感觉可以做得更好,但服务方式相同的事情,请不要告诉我。我只想知道为什么opt.mode和opt.version链接在一起