私はそれほど優れたプログラマーではありませんが、C# でカスタム Minecraft ランチャーを作成しようとしています。オプションをロードおよび保存するためのクラスがあります-うまく機能します-しかし、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が一緒にリンクされている理由を知りたいだけです