Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Инструкция using гарантирует правильное использование экземпляра IDisposable :
var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
}
Когда элемент управления покидает блок инструкции using , полученный IDisposable экземпляр удаляется. В частности, инструкция гарантирует, что удаленный экземпляр удаляется даже в том случае, using если исключение возникает в блоке using инструкции. В предыдущем примере открытый файл закрывается после обработки всех строк.
Используйте инструкцию await using для правильного использования экземпляра IAsyncDisposable :
await using (var resource = new AsyncDisposableExample())
{
// Use the resource
}
Дополнительные сведения об использовании экземпляров см. в IAsyncDisposable удаления" статьи "Реализация метода DisposeAsync".
Вы также можете использовать usingобъявление , которое не требует фигурных скобок:
static IEnumerable<int> LoadNumbers(string filePath)
{
using StreamReader reader = File.OpenText(filePath);
var numbers = new List<int>();
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
return numbers;
}
При объявлении локальная переменная удаляется в using конце области, в которой она объявлена. В предыдущем примере удаление происходит в конце метода.
Переменная, объявленная оператором или объявлением using , является чтением. Его нельзя переназначить или передать в качестве ref параметра out .
Можно объявить несколько экземпляров одного типа в одной using инструкции, как показано в следующем примере:
using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
// Process both files
}
При объявлении нескольких экземпляров в одном using операторе они удаляются в обратном порядке объявления.
Вы также можете использовать инструкцию using и объявление с экземпляром структуры ссылок, которая соответствует шаблону удаления. То есть он имеет метод экземпляра Dispose , который доступен, без параметров и имеет тип возвращаемого void значения.
Оператор using также может иметь следующую форму:
using (expression)
{
// ...
}
где expression создается удаленный экземпляр. Это показано в следующем примере:
StreamReader reader = File.OpenText(filePath);
using (reader)
{
// Process file content
}
Предупреждение
В предыдущем примере после того, как элемент управления покидает инструкцию using , удаленный экземпляр остается в области, пока он уже удален. Если этот экземпляр используется дальше, может возникнуть исключение, например ObjectDisposedException. Поэтому рекомендуется объявлять удаленную переменную в using инструкции или с объявлением using .
Спецификация языка C#
Дополнительные сведения см. в разделе инструкции usingспецификации языка C#.