具有if条件的多个using语句

时间:2019-08-17 13:15:27

标签: c# streamreader streamwriter using-statement

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

在这种情况下如何组织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);
}

2 个答案:

答案 0 :(得分:2)

没有任何代码是不正确的,因为如果条件为真,那么所有使用都将被视为一条语句。
因此,只有在满足条件的情况下,您才可以读写所有文件。

相反,如果您希望始终读取 readFile 并写入 writeFile ,但仅在条件为true时才写入 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);
    }
}

答案 1 :(得分:1)

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

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移到哪里,以便在读取文件打开失败的情况下不会创建文件,并使用“安全导航操作符” ?.处理该情况sw2在循环中为null。

相关问题