我写了这段代码来表示我遇到的错误,好的,当我去文件输入时,它落在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
无效字符为:\
那么,我怎么解决这个问题呢?
答案 0 :(得分:4)
错误来自正则表达式,而不是LINQ。
您将该行作为模式传递,因此“\ N”是无效的转义序列。请注意,它区分大小写,所以如果你有这样的行:
1BR 116 S \ n
现有代码不会出错。
无论如何,要解决此问题只需切换参数的顺序:
.Where(x => !Regex.IsMatch(x, "[\r\n]+"))
根据经验,在try..catch
块中有多行时,永远不会只显示异常消息,始终显示包括堆栈跟踪在内的整个异常,这样您就可以正确调试这些错误,而不是猜测原点错误。