为了账号安全,请及时绑定邮箱和手机立即绑定

作为参数传递的对象未更新

作为参数传递的对象未更新

C#
慕码人8056858 2023-07-09 10:24:39
Presenter 这里我调用了一个名为“services.UpdateSelectedDeposit(deposit);”的方法。正如您所看到的,它调用了以下服务中的一个方法,该方法调用存储库中的一个方法来根据 DepositID 设置存款模型。public void OnDoubleClicked(object sender, EventArgs e){    if(addTipView.DataGridView.CurrentRow.Index != -1)    {        deposit.DepositID = Convert.ToInt32(addTipView.DataGridView.CurrentRow.Cells["DepositID"].Value);        Console.WriteLine(deposit.DepositID);        services.UpdateSelectedDeposit(deposit);        Console.WriteLine(deposit.DepositAmount);        addTipView.TxtTipAmount = deposit.DepositAmount.ToString();        addTipView.TxtDate = deposit.DepoistDate.ToString();        addTipView.TxtHoursWorked = deposit.HoursWorked.ToString();    }}服务public void UpdateSelectedDeposit(Deposit deposit){    repo.GetSelectedDeposit(deposit);}存储库public void GetSelectedDeposit(Deposit deposit){    using (var context = new TipManagerDBEntities())    {        deposit = context.Deposits.Where(x => x.DepositID == deposit.DepositID).FirstOrDefault();        Console.WriteLine(deposit.DepositAmount);    }}当我在存储库中打印存款金额时,我得到正确的值,但当我在演示器中打印存款金额时,它不正确。我作为参数传递的存款类别是通过引用传递的,对吗?为什么我的值在演示者中不正确。
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

当将对象传递给方法(宽松使用的术语)时,您实际上是在传递引用,但是这里重要的一点是对该对象的实际引用是按传递的。这意味着更新它(覆盖它)不会在调用链的更高层执行任何操作。

如果您想覆盖该引用(通过引用传递引用),那么您将需要使用关键字(在适当的情况下)。ref

public void GetSelectedDeposit(ref Deposit deposit)


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信