0

我写了这段代码来表示我遇到的错误,很好,当我进入文件输入时,它属于 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      

无效字符是:\

那么,我该如何解决呢?

4

1 回答 1

4

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

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

1BR 116 S\n

您的现有代码不会出错。

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

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

根据经验,当块中有超过一行时,永远不要只显示异常消息try..catch,总是显示整个异常,包括堆栈跟踪,这样你就可以正确调试这些错误,而不是猜测错误的来源。

于 2013-08-20T12:45:18.907 回答