我是 c# 中的表达式新手。
表达代码
var parameter = Expression.Parameter(typeof(int), "param");
var constant = Expression.Constant(5, typeof(int));
var equal = Expression.Equal(parameter, constant);
var lambdaExpression = Expression.Lambda<Func<int, bool>>(equal, parameter);
var compiledExpression = lambdaExpression.Compile();
查询包含一个字符串值,我只想在该值可转换为 int 时应用表达式
int test;
query = query.Where(i => int.TryParse(i.Key, out test) && compiledExpression(test));
这会返回一个错误,指出不支持 int.TryParse。 有什么办法解决这个问题吗?
你不能在那里使用 out 参数。
1) var v = q.Where(x => x.All(c => c >= '0' && c <= '9'));
2) use regex instead of All
3) write a simple method that calls Int32.Parse and just returns a bool to hide the out param
#3:
static bool SafeIntParse(string s)
{
int n;
return Int32.TryParse(s, out n);
}
var v = q.Where(x => SafeIntParse(x));
SafeIntParse() 方法当然是一个单独的静态方法。
编辑:
对于正则表达式方法:
Regex regex = new Regex("^\\d+$", RegexOptions.Compiled);
var v = q.Where(x => regex.Match(x).Success);
当然,使正则表达式对象成为类的静态对象。
您可以实现自己的函数来获取值,int.TryParse如果字符串无法转换,默认返回0。
给你
private decimal GetDecimal(string value)
{
if(decimal.TryParse(value, out decimal result))
return result;
return 0;
}