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 回答