首页 新闻 会员 周边

netcore 字典修改为什么不成功问题

0
悬赏园豆:5 [待解决问题]

public class Demo
{

    public int SolveQuestionCount { get; set; }

    public int AllCount { get; set; }
}
if (true)
{
	DemoDic[item.Domain].SolveQuestionCount++;
}
DemoDic[Domain].SolveQuestionCount = true 
              ?DemoDic[Domain].SolveQuestionCount++
              : DemoDic[Domain].SolveQuestionCount;

第二种写法不能修改字典中demo的值,为什么

mikefts的主页 mikefts | 初学一级 | 园豆:95
提问于:2023-04-27 15:02
< >
分享
所有回答(2)
0

和字典没关系

int i = 1;
// 简化下你的代码  实际上是
i = i++;
// 我的理解是:
// 1.i++ =>返回值为1,但是i自增为2
// 2.i = i++ => 给i赋值的是1, i重新变回1
复制粘贴机器人 | 园豆:702 (小虾三级) | 2023-04-27 15:24
1

第二种写法不能修改字典中demo的值的原因是在三元运算符中,DemoDic[Domain].SolveQuestionCount++ 实际上是先将 DemoDic[Domain].SolveQuestionCount 的值赋给了三元运算符的结果,然后再将 DemoDic[Domain].SolveQuestionCount 自增1。因此,在执行完这条语句后,DemoDic[Domain].SolveQuestionCount 的值仍然是自增之前的值。

更具体地说,三元运算符实际上相当于下面的代码:

sql

int result;
if (true)
{
DemoDic[item.Domain].SolveQuestionCount++;
result = DemoDic[Domain].SolveQuestionCount;
}
else
{
result = DemoDic[Domain].SolveQuestionCount;
}
DemoDic[Domain].SolveQuestionCount = result;
在这里,DemoDic[Domain].SolveQuestionCount 自增的操作和结果赋值操作是分开的,因此结果赋值时仍然是使用了自增之前的值。

正确的写法应该是这样的:

css

DemoDic[Domain].SolveQuestionCount = true
? ++DemoDic[Domain].SolveQuestionCount
: DemoDic[Domain].SolveQuestionCount;
这样就能够正确地自增 DemoDic[Domain].SolveQuestionCount 并将结果赋给它了。

Technologyforgood | 园豆:5718 (大侠五级) | 2023-04-30 21:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册