2014-09-01 106 views
0

我正在用C#編寫代碼。請參閱下面的代碼。C#對象分配

//-- Constructor 
    public frmInvoice(EditInvoice editInvoice) 
    { 
     InitializeComponent(); 

     originalInfo = new EditInvoice(); 
     editedInfo = new EditInvoice(); 

     originalInfo = editInvoice; 
     editedInfo = editInvoice; 
     payment = new Payment(); 
    } 

    //-- Process 
    private void btnOk_Click(object sender, EventArgs e) 
    { 
     editedInfo.AppliedAmount = Convert.ToDouble(txtAppliedAmount.Text); 
     editedInfo.PaymentCode = cboPaymentCode.SelectedValue.ToString(); 
     editedInfo.Remarks = txtRemarks.Text; 

     if (originalInfo.AppliedAmount != editedInfo.AppliedAmount || 
      originalInfo.PaymentCode != editedInfo.PaymentCode || 
      originalInfo.Remarks != editedInfo.Remarks) 
     { 
      editedInfo.IsEdited = true; 
     } 
    } 

現在的問題是,爲什麼原來的對象**originalInfo**也改變是認爲不會。它很煩人!

附加信息:如果有差異,是否有更好/最短的方式與對象(模型)進行比較?

+1

是否是'editInvoice'的引用類型? – Sayse 2014-09-01 06:36:04

+0

不,它不是一個參考類型 – Bryan 2014-09-01 06:37:55

+2

它可能是...不是一個類? – 2014-09-01 06:38:36

回答

1

由於editInvoice可能是一個引用類型,您應該克隆它而不是直接分配它。

http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone(v=vs.110).aspx

更新: 因爲你指出editInvoice是一個模型,它是引用類型,任何類是引用類型。例如,結構將是一個值類型。請參閱此文章以獲取更多信息:http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx

+0

「不,它不是引用類型」..雖然我很懷疑,但很難說沒有看到實現。 – Sayse 2014-09-01 06:39:23

+0

editInvoice是一個模型。已成功使用MemberwiseClone克隆它。謝謝! – Bryan 2014-09-01 07:25:36

+0

@Bryan很高興看到它的作品,我更新了我的答案,所以你有更多的信息。 – 2014-09-01 08:16:09