Resource resource = null;
try { resource = getResource(); /* do something with resource */ }
finally { if (resource != null) resource.close(); }
Мне было интересно, какой стиль предпочтительнее. Первый позволяет избежать условия if, а второй (я предполагаю) обрабатывает случай прерывания потока сразу после присваивания, но до входа в блок try. Какие еще плюсы и минусы имеют эти стили друг перед другом? Какой из них мне предпочтительнее использовать?
Я видел два способа приобретения и использования ресурсов. Либо:
[code]Resource resource = getResource(); try { /* do something with resource */ } finally { resource.close(); } [/code]
или:
[code]Resource resource = null; try { resource = getResource(); /* do something with resource */ } finally { if (resource != null) resource.close(); } [/code]
Мне было интересно, какой стиль предпочтительнее. Первый позволяет избежать условия if, а второй (я предполагаю) обрабатывает случай прерывания потока сразу после присваивания, но до входа в блок try. Какие еще плюсы и минусы имеют эти стили друг перед другом? Какой из них мне предпочтительнее использовать?
Я использую собственное текстовое поле для проверки входного значения.
Если входные данные недействительны, будет показано окно сообщения и текст в текстовом поле будет отброшен, в противном случае обновите модель.
В ViewModel я использовал метод...
Я использую собственное текстовое поле для проверки входного значения.
Если входные данные недействительны, будет показано окно сообщения и текст в текстовом поле будет отброшен, в противном случае обновите модель.
В ViewModel я использовал метод...
В исходном коде ConcurrentBag в методе TryTake я могу наблюдать такой код:
try { }
finally
{
lockTaken = false; // reset lockTaken to avoid calling Monitor.Exit again in the finally block
Monitor.Exit(list);
}
Как работает оператор return внутри блока try/catch?
пример функции() { пытаться { вернуть истину; } окончательно { вернуть ложь; } } Я ожидаю, что результат этой функции будет true, но вместо этого он false!