我正在开发一个将函数列表转换为c#代码的小项目。 例如:temp1.greaterThan(1); temp2.contains( “A”); temp1,temp2是字符串类型中的表达式变量。 源代码是:
var temp1 = Expression.Variable(typeof(string), "temp1");
所以我认为我需要将temp1转换为整数变量。 我尝试过以下方法但没有效果:
Expression greaterThan = Expression.GreaterThan(temp1, Expression.Constant(1));
它将抛出异常,因为temp1是字符串,因此无法与1进行比较。
Expression.GreaterThan(Expression.Call(typeof(int).GetMethod("Parse"), temp1), Expression.Constant(1));
它引发了“发现的模糊匹配”。例外
Expression.GreaterThan(Expression.Call(typeof(Convert).GetMethod("ToInt32"), temp1), Expression.Constant(1));
相同的异常:找到了模糊的匹配。
Expression.GreaterThan(Expression.Convert(temp1,typeof(Int32)), Expression.Constant(1));
例外:类型'System.String'和'System.Int32'之间没有定义强制运算符。
所以我想我需要在Expression.GreaterThan方法中使用convert方法。 有人有想法吗? 非常感谢。
答案 0 :(得分:6)
您应该使用int.Parse
来解析字符串而不是显式转换。请注意int.Parse
有一些重载,这就是为什么你得到一个"模糊匹配的原因"异常。
var temp1 = Expression.Variable(typeof(string), "temp1");
//use int.Parse(string) here
var parseMethod = typeof(int).GetMethod("Parse", new[] { typeof(string) });
var gt = Expression.GreaterThan(Expression.Call(parseMethod, temp1), Expression.Constant(1));