C# "using" block

标签 c# design-patterns stream using streamreader

我有类似下面的代码...这里有人提到 WebClient、Stream 和 StreamReader 对象都可以从使用 block 中受益。两个简单的问题:

1:这个小片段在使用 block 时会是什么样子?我自己做研究没有问题,所以资源链接很好,但只看一个例子会更快更容易,我会从中理解它。

2:我想养成良好的编码标准的习惯,如果我了解一点使用 block 更好的原因会有帮助......只是为了让你不必担心关闭还是还有更多原因?谢谢!

WebClient client = new WebClient();
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"];

stream.Close()
reader.Close()

最佳答案

using (var client = new WebClient())
using (var stream = client.OpenRead(originGetterURL))
using (var reader = new StreamReader(stream))
{
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
    var encryptionKey = (string)jObject["key"];
    var originURL = (string)jObject["origin_url"];
}

或者简单地说:

using (var client = new WebClient())
{
    var json = client.DownloadString(originGetterURL);
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(json);
    var encryptionKey = (string)jObject["key"];
    var originURL = (string)jObject["origin_url"];
}

关于C# "using" block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761198/

相关文章:

c# - 网络协议(protocol)的实现

java - Android 自定义事件监听器

c++ - stringstream初始化错误

c# - 使用 XNA game studio 在 2D 游戏中按下按键进行射击

C#如何将对象从工作线程传回主线程?

C# 代码更改未通过 IIS 反射(reflect)

c# - 编译器在不同 PC 中为相同代码抛出异常

java - 对应用程序隐藏系统特定详细信息

flutter - 订阅流并在 flutter dart 中转发

Java 输入流缓冲区对象?