1

次のような文字列があります。

"[Current.Age] - 10"
"[Current.Height] + 50"
"[Current.Age] + 10 - [Current.Height] - 50"

[Current.Something]そして、現在選択されているオブジェクトの数値に置き換えたいと思います。たとえば、選択されたオブジェクトは次の状態になる場合があります。

var student = new Student();
student.Age = 20;
student.Height = 180;

したがって、文字列は次のようになります。

"20 - 10"             * or better *  "10"
"180 + 50"            * or better *  "230"
"20 + 10 - 180 - 50"  * or better *  "-200"

これには正規表現を使用する必要があると思います。これをどのように達成できるかについてのアイデアはありますか?

編集:私が必要としているのは、 [Current.Something]s を取り、それらを関連する値に置き換えることができるものです。単純な文字列操作でできることはわかっていますが、これを行う簡単な方法があるかどうか疑問に思っています。

4

1 に答える 1

1

値を含むクラスを制御できる場合。次のメソッドを追加するだけです。

int getValue(string fromThis)
{
    switch(fromThis)
    {
    case "age": {....
}

次に、テキスト パーサーを介してテキストを実行する必要があります (onc はかなり簡単に作成できるはずです)。

何かのようなもの:

string[] newStrings = newString.Split(' ');
if (newStrings.Length < 3)
{
    //error
}
else if (newStrings[0][0] != '[')
{
    //error
}
else
{
    int newValue = 0;
                string fieldString = newStrings[0];// Extract just the part you need.... 
                // I would probably do the above in a method 
    int currentValue = getValue(fieldString);
    int changeValue;
    int.TryParse(newStrings[2], out changeValue);

    switch (newStrings[1])
    {
        case "+":
            {
                newValue = currentValue + changeValue;
                break;
            }
        case "-":
            {
                newValue = currentValue - changeValue;
                break;
            }
        default:
            {
                //error
                break;
            }
    }

    //do something with new value
}

接続されたステートメントに対して何をすべきかを決定するには、さらに多くの作業が必要になりますが、上記の方法で正しい方向に進むはずです。リフレクションを使用してこれを行うには、少しクリーンな方法がありますが、維持するのが難しくなります。

于 2013-01-24T20:02:57.003 に答える