実行時にいくつかのコードを生成しようとしています。ボイラープレートのものを入れて、ユーザーが実際の作業コードを入力できるようにします。私の定型コードは次のようになります。
using System;
public class ClassName
{
public double TheFunction(double input)
{
// user entered code here
}
}
理想的には、string.Format を使用してユーザー コードを挿入し、一意のクラス名を作成したいと考えていますが、次のようでない限り、書式文字列で例外が発生します。
string formatString = @"
using System;
public class ClassName
{0}
public double TheFunction(double input)
{0}
{2}
{1}
{1}";
次に、次のように string.Format を呼び出します。
string entireClass = string.Format(formatString, "{", "}", userInput);
これで問題ありません。フォーマット文字列で中かっこの代わりに {0} と {1} を使用することの醜さを処理できますが、ユーザー入力でも中かっこを使用できなくなりました。フォーマット文字列の中かっこをエスケープする方法、またはユーザー コードの中かっこを {0} と {1} に変換する良い方法はありますか?
ところで、この種のことが起こるのを待っているセキュリティ上の問題であることは知っていますが、これはネットに接続されていないシステムでの内部使用のための Windows フォーム アプリであるため、この状況ではリスクは許容されます。