现在有一个小需求就是一个xml中有一个condition节点,节点中包含有一个字符串类型的表达式,要对这个表达式进行运算,判断运算结果是true还是false。
如下:
<Condition Type="CONDITION">param1>3</Condition>
现需要运算condition中的表达式param1>3。表达式的语法符合javascript表达式语法。
解决的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 |
using
System; using
System.Collections.Generic; using
System.Linq; using
System.Text; using
Microsoft.JScript; namespace
TestXpression { class
Program { /// <summary> /// 微软提供的运算符合js语法的表达式 /// </summary> /// <param name="sExpression"></param> /// <returns></returns> public
static object EvalExpress( string
sExpression) { Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine(); return
Microsoft.JScript.Eval.JScriptEvaluate(sExpression, ve); } /// <summary> /// 传入参数,将参数和参数值进行拼接 /// </summary> /// <param name="name"></param> /// <param name="value"></param> /// <param name="type"></param> /// <returns></returns> public
static string trans( string
name, string
value, string
type) { string
s = "" ; //"var a=10;var b=15;var c=‘hello‘" //string s = "var " + name + "=" + value.ToString() + ";"; if (type == "stringType" ) { s = "var "
+ name + "="
+ "‘"
+ value.ToString() + "‘"
+ ";" ; } else
{ s = "var "
+ name + "="
+ value.ToString() + ";" ; } return
s; } public
static string MakeCondition() { Dictionary< string , string > myParameters = new
Dictionary< string , string >(); myParameters.Add( "xingCan1" , "15" ); myParameters.Add( "xingCan2" , "10" ); myParameters.Add( "xingCan3" , "C" ); string
condition = "" ; string
type = "stringType" ; foreach
( var
ss in
myParameters) { condition += trans(ss.Key.ToString(), ss.Value.ToString(), type); } string
expression1 = "xingCan1>xingCan2" ; string
expression2 = "xingCan3==‘C‘" ; // ------------参数赋值--------------------------- <<<<条件>>>>> //"var xingCan1=10;var xingCan2=15;var xingCan3=‘C‘;xingCan3==‘C‘" condition += expression1; return
condition; } static
void Main( string [] args) { string
s = MakeCondition(); object
flag = EvalExpress(s); System.Console.WriteLine(flag.ToString()); System.Console.ReadLine(); } } } |
原文:http://www.cnblogs.com/devinliang/p/3783861.html