首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C#泛型参数中强制某些运算符受到支持?

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

Stack Overflow用户
提问于 2010-09-06 14:00:17
回答 4查看 589关注 0票数 6

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

最近,我正在开发一个实现算法的C#类库。关键是,我希望库的用户能够选择算法应该使用的机器精度(单精度或双精度),我正在尝试使用泛型。因此,例如:

代码语言:javascript
复制
    Algorithm<double> a = new Algorithm<double>();
    /** Some initializations here */
    double result = a.Solve();

代码语言:javascript
复制
    Algorithm<float> a = new Algorithm<float>();
    /** Some initializations here */
    float result = a.Solve();

因此,泛型类的类型参数意味着是一个十进制数(因为在算法代码中,我需要使用+、*、/、-),但是我不知道对它施加哪种类型约束。我考虑过与所有操作符建立一个接口,但不幸的是,这是不允许的。有什么想法吗?

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

谢谢

托马索

EN

Stack Overflow用户

发布于 2010-09-07 18:33:11

这通常是一个严重的错误,但您可以为数字类型创建一个通用的“包装器”类,该类公开所需的操作,并防止使用不受支持的值类型(即char)实例化,然后指定算法的泛型类型参数必须是包装类。

除了代码复制之外,我喜欢Floste在各个方面的解决方案。您甚至可以简化它;指定私有方法重载,然后一个简单调用私有方法的公共泛型方法,运行时将选择正确的方法(确保包含抛出NotImplementedException的catch-all )。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档