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的值,为什么
和字典没关系
int i = 1;
// 简化下你的代码 实际上是
i = i++;
// 我的理解是:
// 1.i++ =>返回值为1,但是i自增为2
// 2.i = i++ => 给i赋值的是1, i重新变回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 并将结果赋给它了。