4

重複の可能性:
実行時に C# リテラル式を含む文字列を展開できますか

実行時にファイルから読み取ったエスケープ文字列を変換するにはどうすればよいですか。

"Line1\nLine2"

そのリテラル値に:

Line1
Line2

驚くべきことに、ここでCSharpCodeProvider() を使用して反対のことを行う例を見つけました。これは、より難しい変換になるようです。反対のことを行うには、コードを生成してクラスを定義し、メモリ内でコンパイルするか、一連の .Replace() 呼び出しを実行して、エスケープ シーケンスを見逃さないようにする必要があるようです。

4

2 に答える 2

2

CSharpCodeProvider は、ここで確かにうまくいくように思えます。ただし、それを使用する前に 2 つの質問をします。正確にC# 文字列リテラル構文である必要がありますか。また、入力ファイルは信頼できますか?

CSharpCodeProvider は明らかに C# コンパイラの構文を正確に提供しますが、誰かがこのルートを介してプロセスにコードを挿入するのは比較的簡単であるように思えます。

JavaScript の文字列リテラル構文は、C# の文字列リテラル構文に非常に近く、.NET には、実行中のプロセスにコードとして挿入することなく、そのような文字列リテラルを解析できるJavaScriptSerializerクラスが含まれています。

于 2011-05-04T20:07:37.887 に答える
0

エスケープされた値を次のように置き換えます\n

static void Main(string[] args)
{
    var test = "Line1\\nLine2";

    // Line1\nLine2
    Console.WriteLine(test);

    // Line1
    // Line2
    Console.WriteLine(test.Replace("\\n", Environment.NewLine));

    Console.ReadKey();
}
于 2011-05-04T19:51:45.133 に答える