C# 是否存在表示运算符类型的.NET类?
我想做以下工作:C# 是否存在表示运算符类型的.NET类?,c#,.net,C#,.net,我想做以下工作: *OperatorType* o = *OperatorType*.GreaterThan; int i = 50; int increment = -1; int l = 0; for(i; i o l; i = i + increment) { //code } 这个概念可以在javascript中使用eval()来拼凑。。。但这个想法是有一个循环 可以根据运行时设置的值向前或向后移动 这可能吗 谢谢是的,特别是在.NET中,您需要使用。构建表达式树不需要
*OperatorType* o = *OperatorType*.GreaterThan;
int i = 50;
int increment = -1;
int l = 0;
for(i; i o l; i = i + increment)
{
//code
}
这个概念可以在javascript中使用eval()来拼凑。。。但这个想法是有一个循环
可以根据运行时设置的值向前或向后移动
这可能吗
谢谢是的,特别是在.NET中,您需要使用。构建表达式树不需要手动完成,编译器将很乐意将它看到的分配给expression
的任何lambda表达式转换为有效的表达式树
// Creating an expression tree.
Expression<Func<int, int, bool>> greaterThan = (l, r) => l > r;
int i = 50;
int increment = -1;
int l = 0;
for(i; greaterThan(o, i); i = i + increment)
{
//code
}
//创建表达式树。
表达式大于=(l,r)=>l>r;
int i=50;
整数增量=-1;
int l=0;
对于(i;大于(o,i);i=i+增量)
{
//代码
}
调用表达式树将自动将其编译为动态方法,greaterThan将有效地充当委托。编辑:添加了一个lambda函数:
Func<int,int,bool> op = (i1, i2) => i1 > i2;
Func<int, int, bool> lessThan = (num1, num2) => num1 < num2;
Func<int, int, bool> greaterThan = (num1, num2) => num1 > num2;
public void Run()
{
int increment = -1;
int l = 0;
Func<int, int, bool> c = lessThan;
for (int i = 50; c(i, l); i = i + increment)
{
}
}
Func lessThan=(num1,num2)=>num1num1>num2;
公开募捐
{
整数增量=-1;
int l=0;
Func c=lessThan;
对于(int i=50;c(i,l);i=i+增量)
{
}
}
我相信人们会想出比这更优雅的解决方案,但事实是:
public enum Comparison
{
GreaterThan,
LessThan
}
public bool Compare(int a, Comparison c, int b)
{
if (c == Comparison.GreaterThan)
return a > b;
else if (c == Comparison.LessThan)
return a < b;
else
throw new ArgumentException();
}
public void Run()
{
int i = 50;
int increment = -1;
int l = 0;
Comparison c = Comparison.GreaterThan;
for (i; Compare(i, c, l); i = i + increment)
{
}
}
公共枚举比较
{
比,
莱斯坦
}
公共布尔比较(整数a、整数c、整数b)
{
if(c==Comparison.GreaterThan)
返回a>b;
else if(c==Comparison.LessThan)
返回a
Func o=(x,y)=>x>y;
int i=50;
整数增量=-1;
int l=0;
对于(;o(i,l);i=i+增量)
{
//代码
}
或者干脆除掉我:
Predicate<int> o = (x) => x > 0;
int i = 50;
int increment = -1;
for(; o(i) ; i = i + increment)
{
//code
}
谓词o=(x)=>x>0;
int i=50;
整数增量=-1;
对于(;o(i);i=i+增量)
{
//代码
}
您可以定义自己的类并实现自己的运算符,请参见
--已编辑哦,误解了你的意思,最好的方法是像Andrey sad那样使用expression或Func。使用expression而不仅仅是普通Func委托的原因是什么?使用Func只会创建一个绑定到委托的匿名函数。它将在编译时构造。另一方面,将lambda分配给表达式会导致编译器发出一个表达式树,该表达式树可以在运行时进行操作。无法使用匿名方法。
Func<int, int, bool> o = (x, y) => x > y;
int i = 50;
int increment = -1;
int l = 0;
for(; o(i, l) ; i = i + increment)
{
//code
}
Predicate<int> o = (x) => x > 0;
int i = 50;
int increment = -1;
for(; o(i) ; i = i + increment)
{
//code
}