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
в процессе) перед второй операцией?
Ничего страшного. &&
закорачивается в 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";
}
Таким образом, вы выполняете поиск кода расхода только один раз.
Заявление в порядке, &&
приведет к короткому замыканию, что означает, что правая сторона зависит от левой. Таким образом, если TryParse
возвращает истину, тогда код расхода
будет заполнен действительным целым числом, и тогда будет выполнена правильная функция.
Нет, ничего плохого не случится!
Оператор &&
гарантирует, что не будет оценивать правый операнд, если значение левого операнда ложно. Это называется коротким замыканием.
Аналогично, оператор ||
не будет оценивать правый операнд, если значение левого операнда истинно.
Версии этих операторов для логических значений без короткого замыкания: &
и |
. Они будут оценивать оба операнда независимо от значения левой части.