如何在C#泛型类型参数中强制支持某些运算符?

tun*_*nuz 6 .net c# generics constraints operators

可能重复:
定义实现+运算符的泛型

我最近在研究一个实现算法的C#类库.关键是我希望库的用户能够选择算法应该使用的机器精度(单或双),并且我正在尝试使用泛型.所以,例如:

    Algorithm<double> a = new Algorithm<double>();
    /** Some initializations here */
    double result = a.Solve();
Run Code Online (Sandbox Code Playgroud)

要么

    Algorithm<float> a = new Algorithm<float>();
    /** Some initializations here */
    float result = a.Solve();
Run Code Online (Sandbox Code Playgroud)

因此,泛型类的类型参数意味着是十进制数(因为在算法代码中我需要使用+,*,/, - ),但我不知道对它施加哪种类型约束.我已经考虑过与所有运营商建立接口,但不幸的是,这是不允许的.有任何想法吗?

否则,是否有可能在C#中获得类似于C++中的模板特化的东西?

谢谢

托马索

Jon*_*eet 7

基本上你不能.CLR类型系统不支持这种约束.

我之前曾在博客中介绍了如何使用"静态接口" 描述这些约束,但我不知道有任何类似的计划.

您可能希望查看可以让您使用运算符的MiscUtil泛型运算符支持 - 但是您必须使用just 或类似的约束,这当然会允许您不想要的内容.structGuid