int
类型,但我希望它适用于所有可以使用+
运算符添加的类。在泛型中有没有定义这个的方法?例如:
可能是重复的问题:
解决.NET泛型中的重载运算符约束的方案
public List<T> Foo<T>() where T : ISummable
有没有办法做到这一点?
编辑:
将委托传递给执行求和而不是使用类型为Int的+=时,性能最多慢了540%。调查可能的其他解决方案
最终解决方案:
感谢大家的建议。我最终采用了一种既不太慢又在编译时强制检查的解决方案。我不能完全归功于此,因为一位同事帮助我达成了这个目标。无论如何,这就是它:
实现一个接口,其中包含所有所需的运算符,形式为函数。
public interface IFoo<InputType, OutputType>
{
//Adds A to B and returns a value of type OutputType
OutputType Add(InputType a, InputType b);
//Subtracts A from B and returns a value of type OutputType
OutputType Subtract(InputType a, InputType b);
}
创建你想要定义的类,但是不要使用Where子句,而是使用IFoo接口的依赖注入实例。输出类型通常为double,因为操作的本质是数学的。
public class Bar<T>
{
private readonly IFoo<T,double> _operators;
public Bar(IFoo<T, double> operators)
{
_operators = operators;
}
}
现在当你使用这个类时,你可以像这样定义操作规则:
private class Foo : IFoo<int, double>
{
public double Add(int a, int b)
{
return (double)(a+b);
}
public double Subtract(int a, int b)
{
return (double)(a-b);
}
}
那么您可以像这样使用它:
Foo inttoDoubleOperations = new Foo();
Bar myClass = new Bar(Foo);
那样所有操作都在编译时执行 :)
享受吧!
dynamic
更轻松地完成相同的操作,并且它是解决手头问题最不实用的方法。 - Timwi