Sco*_*ain 6 c# if-statement operator-precedence
int expenseCode;
if (int.TryParse(sourceRecord.ExpenseCode, out expenseCode) && _ExpenseCodeLookup.ContainsKey(expenseCode))
{
destRow.PROFIT_CENTER_NAME = _ExpenseCodeLookup[expenseCode];
}
else
destRow.PROFIT_CENTER_NAME = "Unknown";
Run Code Online (Sandbox Code Playgroud)
我所关注的是第一个表达式是否会expenseCode在第二个操作之前运行(在过程中设置)?
Jon*_*eet 15
没关系.&&是短路在C#和out参数肯定会被分配在适当的值TryParse之前ContainsKey被调用.
另一方面,您可以再次使用相同的技巧来获取值:
string profitCenter;
int expenseCode;
if (int.TryParse(sourceRecord.ExpenseCode, out expenseCode) &&
_ExpenseCodeLookup.TryGetValue(expenseCode, out profitCenter))
{
destRow.PROFIT_CENTER_NAME = profitCenter;
}
else
{
destRow.PROFIT_CENTER_NAME = "Unknown";
}
Run Code Online (Sandbox Code Playgroud)
这样,您只需查看一次费用代码.
不,它不会导致坏事发生!
该&&如果左操作数的计算结果为假运营商保证,不将评估正确的操作.这称为短路.
类似地,||如果左操作数的计算结果为true ,则运算符将不会计算右操作数.
这些运算符的非短路版本的布尔值是&和|.无论左侧的值如何,它们都将评估两个操作数.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |