是否可以将字符串转换为逻辑条件中使用的运算符。C#转换字符串以便在逻辑条件中使用
例如
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()
这就是将所有需要来位一起。
编辑:
OK,所以有从来没有看过lambda表达式或表达式我想我会@ jrista的建议后,一起来看看。
我的系统允许解析Enums,所以Expression由于ExpressionType Enum而具有吸引力。
所以我创建了下面的类来验证这一想法:
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"/>
我不会回答“你为什么这样做”,但我会反而评论它:)。不要试图成为一种痛苦,我只是好奇为什么这对你的应用程序很重要。 – JaredPar 2009-05-29 13:16:51
@JaredPar:我总是看到这一点:人们希望将它存储在数据库中,并在稍后的代码中检索它。这并不意味着这是一个好主意,但那是它的来源。 – 2009-05-29 13:18:09
感谢您的更新,但您希望如何处理该XML,这是什么意思?你是否想在元素“q”中包含该示例,并根据XML元素中表达的条件执行“if(Compare(q,x))”比较变量“x”? – 2009-05-29 13:24:28