" |" c#字符串中的运算符 - 如何逃避它?

时间:2015-10-15 17:19:52

标签: c# string escaping

我有以下字符串 - 这是执行exe的参数。

但我收到错误 - "运营商" |"不能应用于字符串和字符串类型的操作数。

何我逃避我的" |" ?我试过了,没有工作:(

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 个答案:

答案 0 :(得分: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,您可以 it 执行此操作:

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);            // <==