读取无效字符时Linq错误

时间:2013-08-20 12:35:25

标签: c# linq

我写了这段代码来表示我遇到的错误,好的,当我去文件输入时,它落在try / catch它只是在屏幕上打印,这行是无效的字符......好,我知道错误是无效的字符,但我需要使用这种格式编码在我们的语言中有重音符号,我需要正确处理它们......但是当一个字符无效时,它在linq中是错误的。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var lines = File.ReadAllLines(args[0], Encoding.GetEncoding(1252));

                var sortedLines = lines.Skip(1)
                          .Where(x => !Regex.IsMatch("[\r\n]+", x))
                          .Take(lines.Length - 1)
                          .ToArray();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

文件输入样本:

014082013  
1BR 116 S\N
9      

无效字符为:\

那么,我怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:4)

错误来自正则表达式,而不是LINQ。

您将该行作为模式传递,因此“\ N”是无效的转义序列。请注意,它区分大小写,所以如果你有这样的行:

  

1BR 116 S \ n

现有代码不会出错。

无论如何,要解决此问题只需切换参数的顺序:

.Where(x => !Regex.IsMatch(x, "[\r\n]+"))

根据经验,在try..catch块中有多行时,永远不会只显示异常消息,始终显示包括堆栈跟踪在内的整个异常,这样您就可以正确调试这些错误,而不是猜测原点错误。