所以我正在处理这个挑战,我必须接受用户输入,检查它是否包含转义序列,然后执行转义序列。
我的问题是为什么转义序列在预先确定的字符串变量上执行,然后你接受用户输入并将其存储在变量中。该输入恰好包含转义序列,例如\ n但不执行。
没有用户输入Ex:
string noInput = "this is a escape \n sequence"
Console.WriteLine(noInput);
Console.ReadLine()
Output is : This is an escape
sequence
或用户输入Ex:
string input = Console.ReadLine();
Console.WriteLine(input);
Console.ReadLine();
Output is : This is an escape \n sequence
希望我能够很好地解释我的问题。我假设这可能是因为安全,但想知道答案。
答案 0 :(得分:3)
“转义序列”是语言/编译器的一个特性..在本例中为C#。 相关语言规范可在 - 2.4.4.5 String literals
找到请注意,该引用是旧版本的语言规范,但仍然适用。 最新版本可以找到here。
来自规范 -
在常规字符串 - 文字字符中跟随反斜杠字符()的字符必须是以下字符之一:',“,\,0,a,b,f,n,r,t,u ,U,x,v。否则,发生编译时错误。示例
重点是,.Net语言可以自由定义字符串文字中的哪些特殊字符将被视为转义序列。但是,它通常是过去C,C ++等语言中使用的语言。
当您接受用户输入时..输入(显然是?)作为文字字符串处理。 (另一种思考方式是,编译后的.Net程序显然与编译器和语言无关。运行时a.k.a CLR在字符串中没有转义序列的概念)
如果你想提供这样的功能(可能你有一个好的场景)..你的选择有限......
请注意,这种方法的一个结论是,Roslyn可能非常重要,只能在您的应用中包含一个功能。
虽然实际上说C#规范中的转义序列不应该随便改变..但我不会赌它。
编辑:证明您看到的字符串(在源代码中)只是给定语言中源代码的工件 -
编译一个C#应用程序,其中包含字符串“Hello \ nWorld”。在二进制编辑器中打开已编译的二进制文您在编译的二进制文件中找到的字符串将没有“\ n”,替换为新行字符的相应字节。
答案 1 :(得分:1)
当它在预定的字符串中时,它被视为单个字符。当用户输入' \'然后' n'然后它认为是两个不同的角色。因此,如果用户在一个字符中输入更多字符串。
答案 2 :(得分:0)
尝试使用子字符串或任何字符串操作来实现您想要的并获得/ n部分用户输入。在这里查看: http://msdn.microsoft.com/en-us/library/vstudio/ms228362(v=vs.110).aspx ;)