使用LINQ查找逐行差异

时间:2013-11-13 15:46:50

标签: c# linq

我已经实现了普通旧式的2个文本文件的逐行比较:

string[] linesOld = File.ReadAllLines(Path.Combine(directory, oldFileName));
string[] linesNew = File.ReadAllLines(Path.Combine(directory, newFileName));

for (int i = 1; i < linesNew.Length; i++)
{
    if (linesNew[i] != linesOld[i])
    {
        Console.WriteLine("Line: {0}, Old: {1}, New: {2}", i, linesOld[i], linesNew[i]);
    }
}

如何以新的LINQ样式重写此代码?

我应该使用

linesNew.Except(linesOld);

1 个答案:

答案 0 :(得分:8)

您可以使用Zip方法:

int i = 1;
foreach (var lines in linesOld.Zip(linesNew, (oldLine, newLine) =>
 new { oldLine, newLine, lineNumber = i++ }).Where(x => x.oldLine != x.newLine))
    Console.WriteLine("Line: {0}, Old: {1}, New: {2}",
                      lines.lineNumber, lines.oldLine, lines.newLine);