Хотел задать вопрос. Я прочитал что такое try-catch и using, Но не понял в чем разница. Пожалуйста объясните. Если можно с примерами для mvc. Заранее спасибо.
try/catch/finally
- это непосредственно средство языка для обработки исключений (с этим, думаю, всё в целом понятно).
using
- это синтаксический сахар, используемый в отдельных случаях.
Конструкция using
используется для объектов, реализующих интерфейс IDisposable
и предназначен для детерминированной очистки ресурсов (то есть здесь и сейчас).
В чем заключается синтаксический сахар? Поясню на примере. Этот код
using(var disposable = new SomeDisposableClass())
{
// какой-то код
}
будет развернут компилятором в нечто наподобие
var disposable = new SomeDisposableClass();
try
{
// какой-то код
}
finally
{
if(disposable != null)
disposable.Dispose();
}
Как можно видеть, using - это частный случай использования конструкции try/catch/finally/
, причем не для всех классов, а только для реализующих интерфейс IDispoasable
. Как можно заметить, в коде, получающемся из using
, не используется блок catch
, то есть любые исключения, выброшенные внутри using
, будут проброшены наверх.
Почему именно интерфейс IDisposable
? Это отдельная тема. Вкратце: в C# пользователь не контролирует выделение и очистку памяти напрямую (так как это существенная головная боль), и всю эту рутину на себя берёт сборщик мусора. Сборщик сам удаляет объекты из памяти, и пользователь знать ничего не знает о том, когда и как он это сделает. Но иногда пользователю. нужно освободить те или иные ресурсы здесь и сейчас. Для этого предназначен интерфейс IDisposable
, у которого есть метод Dispose
. Если какой-то класс владеет теми или иными управляемыми или неуправляемыми ресурсами, то он должен реализовать этот интерфейс, и освободить их в методе Disopose
(реализация метода разумеется возлагается на самого программиста). Конструкция using
позволяет создать такой объект, сделать с ним что-то внутри конструкции, а затем вызвать у него Dispose
, тем самым освободив его ресурсы тогда, когда это нужно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вопрос заключается в следующем 1) Есть класс PivotBlock, который содержит среди всех полей поле ColumnField
Здесь с помощью лямда выражений происходит поиск количества элементов в спискеНо я не понимаю как это работает