2013-01-09 24 views
0

我不是那麼棒的程序員,但我想用C#製作自定義的Minecraft啓動器。所以我有一個加載和保存選項的類 - 效果很好 - 但現在我有一個問題,一個類中的2個變量以某種方式偏向1個地址。我可以選擇3種不同的包裝,每種包裝都有不同的選擇。我可以加載和保存RAM,調試模式,版本選擇模式和自定義版本。但是模式和版本正在向同一地址傾斜,所以如果我改變一個,另一個也改變,但不知道爲什麼,請你幫助我?2個不同的變量poiting到1個地址

保存選項

 //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.modeopt.version連在了一起

回答

2

因爲......

this.version = l1; 
this.mode = l1; 

這些都分配相同的列表對象參考versionmode領域。大概你打算分配hovnothis.mode而不是l1

+0

仍然無法正常工作。我強硬的問題將得到解決,就像你可以看到那裏(編輯我的帖子),仍然無法正常工作。即使我這樣做,就像舊的或像**新名單(l1); **等等 – DragonCz

+0

@DragonCz你是否反序列化你使用破解代碼序列化的實例?如果是這樣,那些序列化的實例會被它們構建的錯誤代碼破壞。刪除它們並重新開始。 – cdhowie

+0

非常感謝你,我很不知道,因爲我正在重做代碼一百萬次!問題解決了,謝謝 – DragonCz

0

答案很簡單:

this.version = l1; 
this.mode = l1; 

爲兩臺versionmode相同的列表。你應該這樣做:

this.mode = new List<int>(l1); 
+0

您對問題的診斷是正確的,您提出的解決方案不是(或似乎不是)。他在變量名中有一個錯字,他不想複製另一個名單。 – Servy

相關問題