我正在用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**
也改变了,据说不是。这很烦人!
附加:如果有差异,是否有更好/最短的方法与对象(模型)进行比较?
答案 0 :(得分: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