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

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);

    }

}

当我在存储库中打印存款金额时,我得到正确的值,但当我在演示器中打印存款金额时,它不正确。我作为参数传递的存款类别是通过引用传递的,对吗?为什么我的值在演示者中不正确。


慕码人8056858
浏览 65回答 1
1回答

Cats萌萌

当将对象传递给方法(宽松使用的术语)时,您实际上是在传递引用,但是这里重要的一点是对该对象的实际引用是按值传递的。这意味着更新它(覆盖它)不会在调用链的更高层执行任何操作。如果您想覆盖该引用(通过引用传递引用),那么您将需要使用关键字(在适当的情况下)。refpublic void GetSelectedDeposit(ref Deposit deposit)
打开App,查看更多内容
随时随地看视频慕课网APP