Будет это, если statment вызовут плохие вещи произойти?

int expenseCode;
if (int.TryParse(sourceRecord.ExpenseCode, out expenseCode) && _ExpenseCodeLookup.ContainsKey(expenseCode))
{
     destRow.PROFIT_CENTER_NAME = _ExpenseCodeLookup[expenseCode];
}
else
     destRow.PROFIT_CENTER_NAME = "Unknown";

Вещью, о которой я являюсь conerned, является желание первое выражение всегда быть выполненной (установка expenseCode в процессе) перед второй операцией?

6
задан Scott Chamberlain 23 June 2010 в 20:17
поделиться

3 ответа

Ничего страшного. && закорачивается в 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";
}

Таким образом, вы выполняете поиск кода расхода только один раз.

15
ответ дан 8 December 2019 в 04:51
поделиться

Заявление в порядке, && приведет к короткому замыканию, что означает, что правая сторона зависит от левой. Таким образом, если TryParse возвращает истину, тогда код расхода будет заполнен действительным целым числом, и тогда будет выполнена правильная функция.

3
ответ дан 8 December 2019 в 04:51
поделиться

Нет, ничего плохого не случится!

Оператор && гарантирует, что не будет оценивать правый операнд, если значение левого операнда ложно. Это называется коротким замыканием.

Аналогично, оператор || не будет оценивать правый операнд, если значение левого операнда истинно.

Версии этих операторов для логических значений без короткого замыкания: & и | . Они будут оценивать оба операнда независимо от значения левой части.

6
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: