以编程方式指定运算符
是否可以指定一个运算符 R
,其中 R
可以是算术运算符、关系运算符或逻辑运算符?
例如,一个计算
c = a R b
我可以在哪里指定 R
是否为 +、-、*、/
的函数可以在 C# 中完成吗?
Is it possible to specify an operator R
where R
can be an arithmetic, relational or logical operator ?
For example a function that calculates
c = a R b
where I can specify whether R
is +, -, *, /
Can this be done in C# ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
二元运算符是任何接受两个操作数的函数。使用委托来抽象此功能很简单a>,基本上是方法(函数)的包装器。
为了使这一点更清楚,我们可以定义一个泛型方法,它只使用指定的参数调用委托并返回其结果:
并且您可以使用它来传递参数和运算符的任意组合:
然后您可以使用相同的泛型方法执行您想要的任何操作:
使用 lambda 表达式,您甚至可以通过将其指定为匿名方法来“动态”创建运算符:
A binary operator is any function which accepts two operands. It is simple to abstract this functionality using delegates, which are basically wrappers around methods (functions).
To make this clearer, we can define a generic method which does nothing more that invoke the delegate using specified parameters, and return its result:
And you could use it to pass any combination of parameters and operators:
You can then use the same generic method to do whatever operation you want:
Using lambda expressions, you can even create the operator "on the fly", by specifying it as an anonymous method:
您可以使用 lambda 做一些非常接近的事情:
然后像任何其他委托一样使用它:
如果有问题的类型是用户使用重载运算符定义的,您可以使用反射,但恐怕对于像 < 这样的类型是不可能的代码>int。
You can do something very close to that using lambda:
And then use it like any other delegate:
If the type in question were user-defined with overloaded operators, you could use reflection, but I'm afraid it's not possible for types like
int
.查看表达式树 - http://msdn.microsoft.com/en-us/库/bb397951.aspx
Check out Expression Trees - http://msdn.microsoft.com/en-us/library/bb397951.aspx
C# 中可能存在运算符重载,请检查一些 MSDN
http://msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx
It is possible to have operator overloading in C#, check some MSDN
http://msdn.microsoft.com/en-us/library/aa288467(v=vs.71).aspx