程序开发 > C# > 正文

.net(C#)误标错误误导人-编译器错误消息: CS1010: 常量中有换行符

亮术网 2020-08-22 本网原创

有的时候.net(C#)编译器标示的错误十分模糊,没有错误的位置却标示有错误,有错误的位置却没有标示,给排查错误带来非常大的困难,以下的就是这样一个错误,错误发生在前台页面(aspx页)的绑定输出,具体错误如下:

 

编译器错误消息: CS1010: 常量中有换行符

<a href="<%# Eval(Id") %>&n=<%# Server.UrlEncode(ToString(Eval("ClassName"))) %>"><%# Eval("ClassName") %></a>

 

错误提示用红波浪线标在 <%# Eval("ClassName") %> 的 <%# 处,无论怎么看这里根本没有错误,这样的提示完全是误导,如果一直停留在这里找错误将永远也找不出错误;有一点可以肯定,错误一定发生在这里,不会在后台代码,因为后台代码有误不会在前台用红波浪线标示。

像这样具有误导性质的错误,我们应该怎么把它找出来?其实也很简单,既然可以确定发生在标示有波浪线的这一处代码,如果代码不长,可以从头到尾认真检查一次代码,这样很快就能找出错误;如果代码比较长,可以以红波浪线为起点向前或向后排查,这样或许能快点找出错误。

上面的代码只有一行比较短,可以把整行检查一遍,仔细检查可以发现:<%# Eval(Id") %> 的 Id 前面少了一个双引号("),加上双引号后,问题解决。

从以上最终找出错误的结果可以看出,由于错误的多样性和复杂性,编译器不可能每次都能精确的提示错误的具体位置,它毕竟没有人灵活,有的时候,编译器只是大概的提示了下错误,有的时候甚至抛出具有误导性的提示,这些都需要我们发挥主观能动性,认真分析仔细排查,从而快速找出错误。