带有 if 条件的多个 using 语句

Multiple using statements with if condition

我需要读取一个文件并将处理后的数据写入一个或可选的两个文件中。

这种情况下如何组织Using语句? 这样的东西行得通吗?

if (condition)
    using (var sw2 = StreamWriter(writeFile2))
using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
{
    var line = sr.ReadLine();
    sw.WriteLine(line);
    if (condition)
        sw2.WriteLine(line);
}

不,您的代码不正确,因为如果条件为真,则所有使用都被视为单个语句。
所以你read/write所有的文件只有在条件为真时才会。

如果您想始终读取 readFile 并写入 writeFile 而写入 writeFile2 只有当条件为真时,你才需要用正确的大括号清楚地表达你的意图

using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
{
    var line = sr.ReadLine();
    sw.WriteLine(line);
    if (condition)
    {
        using (var sw2 = StreamWriter(writeFile2))
            sw2.WriteLine(line);
    }
}

使用块可以处理空罚款。然后您可以执行以下操作:

using (var sr = new StreamReader(readFile))
using (var sw = StreamWriter(writeFile))
using (var sw2 = condition ? new StreamReader(writeFile2) : null)
{
    var line = sr.ReadLine();
    sw.WriteLine(line);
    sw2?.WriteLine(line);
}

我在打开流后移动了 sw2 reader 这样如果读取文件打开失败就不会创建文件,并使用了 "safe navigation operator" ?. 来处理循环中 sw2 为 null 的情况。