Роль оператора using

125
13 ноября 2019, 07:10

Вопрос по поводу оператора using. Почему когда я пишу так, то в файл ничего не пишется.

static void Main(string[] args)
{
    string[] lines = { "First line", "Second line", "Third line" };
    string docPath = Path.Combine(Directory.GetCurrentDirectory(), "WriteLines.txt");
    StreamWriter outputFile = new StreamWriter(docPath);
    outputFile.WriteLine(lines[0]);
}

А если по примеру с msdn делать, то всё работает. Какую роль играет оператор using в данном примере? Да и в общем объяснение "Предоставляет удобный синтаксис, обеспечивающий правильное использование объектов IDisposable" мне непонятно.

static void Main(string[] args)
{
    string[] lines = { "First line", "Second line", "Third line" };
    string docPath = Path.Combine(Directory.GetCurrentDirectory(), "WriteLines.txt");
    using (StreamWriter outputFile = new StreamWriter(docPath))
    {
        foreach (string line in lines)
            outputFile.WriteLine(line);
    }
}
Answer 1
using (StreamWriter outputFile = new StreamWriter(docPath))
{
    foreach (string line in lines)
        outputFile.WriteLine(line);
} // вызывает outputFile.Dispose(), который выталкивает на диск данные из буфера
Answer 2

using автоматически Dispose и Flush вызывает.

Без using можно тоже самое написать:

string[] lines = { "First line", "Second line", "Third line" };
string docPath = Path.Combine(Directory.GetCurrentDirectory(), "WriteLines.txt");
StreamWriter outputFile = new StreamWriter(docPath);
outputFile.AutoFlush = true;
foreach (string line in lines)
    outputFile.WriteLine(line);
outputFile.Dispose();

Ну и в try/finally ещё заключить нужно.

READ ALSO
Не меняется значение контента с помощью триггера

Не меняется значение контента с помощью триггера

Имеется код пагинатора, который должен при контенте с значением 0 сделать кнопку неактивной, а так же установить контент кнопки как

117
Кнопка с выпадающим списком

Кнопка с выпадающим списком

Нужно реализовать кнопку следующего вида

114
Кастомный шрифт

Кастомный шрифт

Использую в проекте свой кастомный шрифт, в свойствах текст бокса указал его, но я так понимаю он будет только у меня работать

130
Как “добавить” SFML в проект?

Как “добавить” SFML в проект?

Я добавил необходимые ссылки на DLL в SFML(первая картинка), и пытаюсь скомпилировать программу, но вылезает ошибка (вторая картинка)

120