c# - 组合 `using` 语句与一个一个地执行它们一样吗?

标签 c#

注意:我很抱歉这个奇怪的标题,但我想不出更好的标题,请随意编辑。

所以我有一个关于在 C# 中使用 block 的非常简单的问题。我知道它的作用以及为什么要在 IO 和网络操作上使用它,但是我需要知道是否可以将它们分组,因为如果我有多个它们,那就太过分了。

所以基本上问题很简单:下面的这两个函数是否相同?或者我应该使用带有多级缩进的后者?

public static async Task ReadStuffUsingTogether()
{
    using (var client = new HttpClient())
    using (var response = await client.GetAsync("http://bigfile.com/file.csv", HttpCompletionOption.ResponseHeadersRead))
    using (var fileStream = await response.Content.ReadAsStreamAsync())
    using (var writeStream = File.Open("1.csv", FileMode.Create))
    {
        await fileStream.CopyToAsync(writeStream);
    }
}

// Too much identation in my opinion
public static async Task ReadStuffUsing()
{
    using (var client = new HttpClient())
    {
        using (var response = await client.GetAsync("http://bigfile.com/file.csv", HttpCompletionOption.ResponseHeadersRead))
        {
            using (var fileStream = await response.Content.ReadAsStreamAsync())
            {
                using (var writeStream = File.Open("1.csv", FileMode.Create))
                {
                    await fileStream.CopyToAsync(writeStream);
                }
            }
        }
    }
}

最佳答案

嗯,其实是一样的。这里的规则与嵌套的“if”语句相同:

if(x) 
if(y) 
if(z) DoSomething();

或者:

if(x)
{
   if(y) 
   {
       if(z)
       {
           DoSomething(); 
           .. some other code
       }
   }
}

两者之间的主要区别在于,使用大括号可以添加 block 代码,而没有 - 只有一行

关于c# - 组合 `using` 语句与一个一个地执行它们一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657761/

相关文章:

c# - 在 c# 中使用来自 c 源的 cygwin 编译的 dll,在 socket() 、 fork() 和类似的 read write protected memory 上出错

c# - 将位域转换为数组

c# - 将 Hashalgorithm 与 ReadOnlySpan<byte> 结合使用

c# - 我如何解决 Cannot create a DbSet for 'CUserMasterLocal' because this type is not included in the model for the context

c# - 将字符串转换为首字母大写

c# - 实现 C# 控制台应用程序的正确方法?

c# - C# 的风格指南?

c# - 如何将参数传递给 MySQL OdbcCommand 并且仅当谓词匹配时如何更新?

c# - C#中的滚动标签

c# - 如何按升序将来自其他两个列表 C# 的元素存储在列表中?