虚拟代码:
public object Addition(object a,object b) { var type = a.GetType(); var op = type.GetMethod("op_Addition",BindingFlags.Static | BindingFlags.Public); return op.Invoke(null,new object[] { a,b }); }
解决方法
是的,它们不是像这样的成员存在的自定义运算符 – 而是有内置的IL指令.
(对于字符串连接,情况也是如此,除非C#编译器构建对string.Concat的调用.)
如果您使用的是C#4和.NET 4,最简单的方法是使用动态类型:
public dynamic Addition(dynamic x,dynamic y) { return x + y; }
对于早期版本,您需要特殊情况下某些类型:(
目前尚不清楚你的背景是什么,但你可能会发现Marc Gravell的article on generic operators很有趣.