Примерно так:
using(WebClient client = new WebClient())
using(Stream stream = client.OpenRead(originGetterURL))
StreamReader reader = new StreamReader(stream) {
JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
string encryptionKey = (string)jObject["key"];
string originURL = (string)jObject["origin_url"];
}
Что касается того, почему блоки using
хороши и лучше, чем ручной вызов Dispose ... image, если какой-либо код в этом блоке using
вызвал исключениепрежде чем вы попадете в строки, где вы закрываете все?По сути, вы бы пропустили любой неуправляемый ресурс, которым IDisposable-объект управляет изнутри.using
гарантирует, что Dispose вызывается правильно, даже при наличии исключения (по сути, путем внедрения соответствующего блока try / finally).
По возможности (т. Е. Вам не нужно сохранять время жизнинекоторые IDisposable в разных областях), вы должны использовать блоки using
, если только по той причине, что они уменьшают количество шаблонного кода, который вы должны написать, чтобы гарантировать, что ваш собственный код безопасен и корректен.