7

虚拟代码:

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 });
}

此方法抱怨 int/float/double,找不到这些方法(op_Addition)。

那么如何构建一个通用的加法方法呢?

4

1 回答 1

8

是的,它们不是像这样的成员存在的自定义运算符 - 而是内置的 IL 指令。

(字符串连接几乎string.Concat也是如此,除了 C# 编译器构建对 . 的调用。)

如果您使用 C# 4 和 .NET 4,最简单的方法是使用动态类型:

public dynamic Addition(dynamic x, dynamic y)
{
    return x + y;
}

对于早期版本,您需要对某些类型进行特殊处理:(

不清楚您的上下文是什么,但您可能会发现 Marc Gravell关于泛型运算符的文章很有趣。

于 2012-06-22T11:39:46.647 回答