0

のように有効な通常の文字列リテラルのコンパイラは、エラーなしでコンパイルします。escape sequence\n\t

しかし、私がのinvalid escape charactersように使用した瞬間\s\wコンパイラはエラーを表示します。はい、それを使用verbatim stringまたはエスケープすることでエラーを回避できます\\が、私の質問は

コンパイラは文字列リテラルが有効であるかどうかを検証escape charactersしますか?そうであれば、それが唯一の目的です!

4

2 に答える 2

3

コンパイラは有効なエスケープ文字の文字列リテラルを検証しますか?

はい、明らかにそうです。そのため、エラーメッセージが表示されます。

もしそうなら、それは唯一の目的です!

この質問がよくわかりません。コンパイラが無効なエスケープ シーケンスを単純に受け入れず、逐語的に処理しない理由を疑問に思っていると思います。これは確かに可能性がありますが、文字列リテラルの解釈に若干の一貫性がなくなります:\xの実際の値に応じて異なる意味になりますx

少なくとも、エスケープ シーケンスの有効性を C# で厳密にチェックすることにデメリットはありません。また、連続するバックスラッシュの数が異なることから生じるタイプミスや混乱によるエラーを回避できるかもしれません。

于 2012-10-23T08:48:28.373 に答える
2

はい、コンパイラは文字列を検証します。無効なエスケープ文字を使用すると、エラーが発生します。

コンパイラ エラー CS1009 - MSDN

文字列内のバックスラッシュの後に予期しない文字が続き(\)ます。コンパイラは、有効なエスケープ文字の 1 つを想定しています。詳細については、文字エスケープを参照してください。

于 2012-10-23T08:52:07.247 に答える