2014-09-01 95 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