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

本文关键字:字符串 转换 绝对值 语句 相对 | 更新日期: 2023-09-27 17:55:35

>我有如下字符串:

"[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]并用相关值替换它们的东西。我知道我可以通过简单的字符串操作来做到这一点,但我只是想知道是否有一种简短的方法可以做到这一点。

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

如果你可以控制包含该值的类;你可以添加一个叫做:

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
}

确定如何处理连接语句会有更多的工作,但上述内容应该会让你朝着正确的方向前进。使用反射有稍微干净的方法来做到这一点,但它更难维护。