是的,使用泛型:
public T Addtoatal<T>(T a, T b) {}
如果方法需要使用任何操作符(+,-,*)等会出现问题,因为泛型类型不能保证类 T 有操作符(操作符不能在接口中声明,因此你不能做一个匹配的约束)。
在 .Net 4.0 中,您可以使用动态类型来获取动态变量以包含结果并将其添加到其中:
public T Addtoatal<T>(T a, T b) {
dynamic res = a;
a += b;
return res;
}
在其他 .Net 版本中,您需要像 MiscUtils 中的 Operator 类这样的解决方法:generic method to add int, float, in c#
具有三个参数的第二个示例需要具有不同的签名(在 .Net 2.0 中),因为它具有更多参数。
在 .Net 4.0 中,您可以只对泛型类型使用可选参数,但不能对值类型使用:
public T Addtoatal<T>(T a, T b, T c = null) where T: class { //Do stuff }
但是您可以使用可空类型的装箱,这适用于 int 和 double:
public T Addtoatal<T>(T? a, T? b, T? c = null) where T : struct { //Do stuff, use .Value }
如果您不想使用泛型,现在您可以做的下一个最好的事情是将单个方法声明为双精度(C# 4.0,因为可选参数):
public double Addtoatal(double a, double b, double c = 0) {}
在本例中,int 值无论如何都会转换为 double,因此不会丢失数据,并且 int 可以隐式转换为 double,但返回值需要显式转换为 int。