将具有相对语句的字符串转换为绝对值

时间:2013-01-23 15:00:33

标签: c# .net regex string

我有以下字符串:

"[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]并将其替换为相关值的内容。我知道我可以通过简单的字符串操作来完成它,但我只是想知道是否有一个简短的方法来做到这一点。

1 个答案:

答案 0 :(得分: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
}

确定如何为连接语句做什么会有更多的工作,但上面的内容应该让你朝着正确的方向前进。使用反射有一些更简洁的方法来做到这一点,但它更难维护。