C# - Есть ли причина НЕ создавать экземпляр класса и использовать его в одной строке кода? - PullRequest
2 голосов
/ 17 марта 2020

Я знаю, что это был бы правильный способ использования StreamWriter:

using (StreamWriter sw = new StreamWriter(hreq.GetRequestStream()))
    sw.Write(jsonPostData);

Но как насчет этого? Это также верно или его следует избегать? Будет ли он правильно утилизирован?

new StreamWriter(hreq.GetRequestStream()).Write(jsonPostData);

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

При использовании IDisposable s (т. Е. Обычно внешних ресурсов) вам необходимо вызвать Dispose() для них. using - это syntacti c сахар, который делает это за вас, но основной принцип остается - вы используете какой-то специальный вызов, чтобы убедиться, что Dispose() вызывается. Во втором фрагменте Dispose() не вызывается, и вы будете пропускать ресурс до тех пор, пока программа не завершится.

1 голос
/ 17 марта 2020

Просто хотел поделиться более безопасной версией:

// In case hreq.GetRequestStream() returns a readonly stream,
// which causes new StreamWriter(Stream) to throw exception
using (var stream = hreq.GetRequestStream())
{
    using (var sw = new StreamWriter(stream))
    { 
        sw.Write(jsonPostData);
    }
}
...