2015-10-15 59 views
-2

我有以下字符串 - 這是執行exe的參數。「|」 c#中的運算符字符串 - 如何逃避它?

但我得到的錯誤 - 「操作‘|’?不能應用於類型字符串,字符串的操作數

何我逃不過我的‘|’我試過\,沒有工作:(

string.Format(
         @"-S -E -M -m -e ascii -i {0}.dat -T db1.dbo.table1 -R {1}.reject -t "|" -r \r\n -rt value -rv 1000 -W -fh 0", 
         saveFilePath + a, 
         saveFilePath + b); 
+1

你爲什麼不使用「字符串\ |」而不是@「」|「」? – darkndream

+9

它不是'|'需要轉義,它是雙引號。使用雙引號。 – Habib

+0

在這種情況下,我是否需要在開頭保留「@」? – Relativity

回答

4

@"..."文字,有"字符,則必須使用其中兩個這樣:

string.Format(
    @"-S -E -M -m -e ascii -i {0}.dat -T db1.dbo.table1 -R {1}.reject -t ""|"" -r \r\n -rt value -rv 1000 -W -fh 0", 
// note -----------------------------------------------------------------^^-^^ 
    saveFilePath + a, 
    saveFilePath + b); 

然而,如果您希望那些\r\n爲回車符和換行符,則不能使用@"..."字符串文字,因爲反斜槓並不是特殊字符(這是它們的重點)。所以,如果是這樣的話:

string.Format(
     "-S -E -M -m -e ascii -i {0}.dat -T db1.dbo.table1 -R {1}.reject -t \"|\" -r \r\n -rt value -rv 1000 -W -fh 0", 
// note ^-------------------------------------------------------------------^^-^^ 
     saveFilePath + a, 
     saveFilePath + b); 

推薦閱讀:string (C# Reference)


邊注:有沒有必要爲你在函數的參數做字符串連接。既然你已經調用string.Format,你可以有做到這一點:

string.Format(
    "-S -E -M -m -e ascii -i {0}{1}.dat -T db1.dbo.table1 -R {2}{3}.reject -t \"|\" -r \r\n -rt value -rv 1000 -W -fh 0", 
// note ---------------------^^^^^^--------------------------^^^^^^ 
    saveFilePath, 
    a,    // <== 
    saveFilePath, 
    b);   // <==