2011-04-17 28 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