2011-04-17 70 views
0

我写了一个自动生成一些代码行的软件。但是,当我在一个类中复制并粘贴该代码后,再次重新打开该代码时,我会遇到不一致的线结束错误。 这是怎么回事?问题出在哪里,我该如何解决?这是关于carriege回归和换行。 样品该类:不一致的行结束错误

  txtResult.Text += " End Get" + CrLf 
     txtResult.Text += " Set(ByVal Value As " + GeneratePropertyCast(para.DbType) + ")" + CrLf 
     txtResult.Text += " Item(" 
     txtResult.Text += GeneratePropertyColumn(para.ParameterName) + ")= Value" + CrLf 
     txtResult.Text += " End Set" + CrLf 
     txtResult.Text += "End Property" + CrLf 
+1

用一些示例代码 – 2011-04-17 14:51:07

+0

@Floyd尝试并回答这个问题会更容易,那么您如何计划发现不同的行结尾呢? – slhck 2011-04-17 14:52:17

+1

@slhck:不是生成的“代码”,而是生成它的代码。 OP现在已经做到了。 – 2011-04-17 15:01:14

回答

4

我有点不清楚确切位置的问题,但它看起来像你在C#中建立VB.Net代码,你得到的不一致线在VB中结束该代码的错误。

好了,所以一些想法去尝试,可以帮助:

  1. 不要使用CrLf - 这是一个向后兼容的事情。使用Environment.NewLine

  2. 您的示例不是一个完整的可编译代码块,您的错误替代新行字符可能来自代码的另一部分。

  3. Visual Studio通常会自动修复不一致的行结束符,例如,如果您从网络中通过代码段。你将代码粘贴到哪里?

  4. 不要在字符串中使用大量的+=,而应使用StringBuilder实例。您也可以使用包含WriteLine方法的TextWriterStreamWriter

  5. 或者,甚至更好,.Net的负载为CodeDom stuff,它允许您通过指定所需内容而不是原始代码来构建代码。

+0

为什么不使用它们?你能解释一下Keith吗? – Bahman 2011-04-17 15:57:04

+0

我不会在这里使用'StringBuilder'。 'String.Concat'或'String.Format'是更好的选择。 'StringBuilder'确实只有在循环中才有意义,在我们展示的示例代码中并不是这种情况。 – 2011-04-17 16:02:19

+0

@巴曼 - 为什么不用什么? 'CrLf'是平台依赖的(它只是在那里使VB6升级更容易),'Environment.NewLine'不是。 '+ ='对于有很多操作的大字符串来说很慢,'StringBuilder'为构建大字符串而优化。 – Keith 2011-04-17 16:04:04

0

根据你实际得到的错误(当打开上面的代码发布,或打开由上面的代码生成的代码的时候),我会建议你用十六进制编辑器打开文件,并检查是否所有的行结束符合“0D 0A”。
如果您正在使用任何其他平台,那么windows(linux,mac)所需的行结束是不同的。
看看on Wikipedia,以确保您使用正确的结局。

+0

亚历克斯,我开始这个课程时就明白了! – Bahman 2011-04-17 15:54:36