") y) {} 或 if(x ">" as Operator y){} 我明白这可能不是标准的-6ren">
gpt4 book ai didi

C# 转换字符串以用于逻辑条件

转载 作者:可可西里 更新时间:2023-11-01 07:52:45 27 4
gpt4 key购买 nike

是否可以将字符串转换为运算符以用于逻辑条件。

例如

if(x Convert.ToOperator(">") y) {}

if(x ">" as Operator y){}

我明白这可能不是标准的练习题,因此我对问我为什么他妈的想要做这样的事情的答案不感兴趣。

提前致谢

编辑:好的,我同意,只是提供一些背景信息才公平。

我们有围绕反射和 XML 构建的系统。为了方便起见,我希望能够说些类似的话。

<Value = "Object1.Value" Operator = ">" Condition = "0"/>

编辑:感谢您的评论,我无法在此处正确解释。我想我的问题的答案是“你不能”,这绝对没问题(也是我的想法)。感谢您的评论。

编辑:Sod it I'm going to a go.

想象一下

<Namespace.LogicRule Value= "Object1.Value" Operator=">" Condition="0">  

这将反射(reflect)到一个类中,所以现在我想通过调用来测试条件

bool LogicRule.Test()

这就是所有需要结合在一起的地方。

编辑:

好的,所以我从未看过 Lambda 或表达式,我想我会看看 @jrista 的建议。

我的系统允许解析枚举,因此由于 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,我不确定我能否使其通用?我以前从未使用过表达式,但这似乎有效。

这种方式可以在我们的 XML 方式中声明为

Operation<Left="1" Right="2" ExpressionType="LessThan" Type="System.Int32"/>

最佳答案

你可以这样做:

public static bool Compare<T>(string op, T x, T y) where T:IComparable
{
switch(op)
{
case "==" : return x.CompareTo(y)==0;
case "!=" : return x.CompareTo(y)!=0;
case ">" : return x.CompareTo(y)>0;
case ">=" : return x.CompareTo(y)>=0;
case "<" : return x.CompareTo(y)<0;
case "<=" : return x.CompareTo(y)<=0;
}
}

关于C# 转换字符串以用于逻辑条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com