如果这个判断会导致坏事发生吗?

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)

这样,您只需查看一次费用代码.


Meh*_*ari 6

不,它不会导致坏事发生!

&&如果左操作数的计算结果为假运营商保证,不将评估正确的操作.这称为短路.

类似地,||如果左操作数的计算结果为true ,则运算符将不会计算右操作数.

这些运算符的非短路版本的布尔值是&|.无论左侧的值如何,它们都将评估两个操作数.