我有以下字符串:
"[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]
并将其替换为相关值的内容。我知道我可以通过简单的字符串操作来完成它,但我只是想知道是否有一个简短的方法来做到这一点。
答案 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
}
确定如何为连接语句做什么会有更多的工作,但上面的内容应该让你朝着正确的方向前进。使用反射有一些更简洁的方法来做到这一点,但它更难维护。