有没有办法做到这一点?

我想要一个 T 的集合类,它可以对 T 类型进行加法、减法。我想保持 T 通用,而不是有几个具有相同代码但类型不同的集合。

你会如何约束泛型 T ?

示例:我想定义一个集合(T 为 IDoMaths)。我不想使用命名方法创建自己的整数等类来执行操作,因为我认为它会更慢。这部分代码实际上经常被调用,并且往往是性能的瓶颈。

最佳答案

不幸的是你不能。

Marc Gravell 将 implemented 作为 MiscUtil 的一部分(也带有 more general article)有一个解决方法。它很整洁,但你确实失去了静态类型检查。

与此类似(就丢失类型检查而言),C# 4.0 的新 dynamic 特性允许您以任意方式使用运算符,仅在执行时解析它们:

dynamic x = 10.0;
dynamic y = 3.0;
double z = x / y; // z = 3.3333333 (double arithmetic)

dynamic a = 10;
dynamic b = 3;
int c = a / b; // c = 3 (integer arithmetic)

就在今天下午,我用它来实现 Enumerable.Sum 的动态形式。我即将对其进行基准测试。 Marc Gravell 最近也写了一篇关于这个的 blog post

如果您使用的是 VB,则可能仅针对您想要后期绑定(bind)的代码部分关闭 Option Strict 会产生相同的效果,但恐怕我对 VB 的熟悉程度不如对 C# 的熟悉。

关于.net - 如何约束泛型参数以实现基本数学运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/917961/

10-11 01:14