是否有可能将一个字符串转换成运算符,以便在逻辑条件中使用。
例如:
if(x Convert.ToOperator(">") y) {}
或者if(x ">" as Operator y){}
我很理解这可能不是标准问题,因此我对那些问我为什么要做这样的事情的答案不感兴趣。
提前感谢。
编辑:好的,我同意,给一些背景信息是公平的。
我们的系统是基于反射和XML构建的。 我想能够轻松地说些类似的话。
<Value = "Object1.Value" Operator = ">" Condition = "0"/>
编辑:感谢您的评论,我无法在此适当地解释这个问题。 我想我的问题得到了“你不能”的回答,这完全没有问题(也是我所想的)。 感谢您的评论。
编辑:算了,我要试一试。
想象以下情况
<Namespace.LogicRule Value= "Object1.Value" Operator=">" Condition="0">
这将会被映射到一个类中,现在我想通过调用来测试条件:
bool LogicRule.Test()
那就是需要所有东西都能够齐头并进的部分。
编辑:
好的,在@jrista的建议之后,我第一次看了 Lambdas 或表达式。
我的系统允许解析枚举,因此由于ExpressionType枚举,表达式很有吸引力。
因此,我创建了以下类来测试这个想法:
public class Operation
{
private object _Right;
private object _Left;
private ExpressionType _ExpressionType;
private string _Type;
public object Left
{
get { return _Left; }
set { _Left = value; }
}
public object Right
{
get { return _Right; }
set { _Right = value; }
}
public string Type
{
get { return _Type; }
set { _Type = value; }
}
public ExpressionType ExpressionType
{
get { return _ExpressionType; }
set { _ExpressionType = value; }
}
public bool Evaluate()
{
var param = Expression.Parameter(typeof(int), "left");
var param2 = Expression.Parameter(typeof(int), "right");
Expression<Func<int, int, bool>> expression = Expression.Lambda<Func<int, int, bool>>(
Expression.MakeBinary(ExpressionType, param, param2), param, param2);
Func<int, int, bool> del = expression.Compile();
return del(Convert.ToInt32(Left), Convert.ToInt32(Right));
}
}
显然,目前只能针对Int32和基本的ExpressionTypes进行操作,我不确定能否使其泛化。我以前从未使用过Expressions,但这似乎能够运行。
然后,我们可以按照XML方式声明此方法:
Operation<Left="1" Right="2" ExpressionType="LessThan" Type="System.Int32"/>