是否可以将字符串转换为运算符以用于逻辑条件。
例如
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()
这就是所有需要结合在一起的地方。
编辑:
好的,所以我从来没有看过 Lambdas 或 Expressions,我想我会关注@jrista 的建议。
我的系统允许解析枚举,因此表达式很有吸引力,因为表达式类型枚举。
所以我创建了以下类来测试这个想法:
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,我不确定我是否可以使其通用?我以前从未使用过表达式,但这似乎有效。
然后可以用我们的 XML 方式将这种方式声明为
Operation<Left="1" Right="2" ExpressionType="LessThan" Type="System.Int32"/>