我真的很喜欢一个泛型数字类型作为 Func<TInput, THere, TResult>
的第二个泛型类型参数。下面给出,因此我可以根据需要提供整数或 double 或小数。
var _resultSelectors = new Dictionary<string, Func<DateTime, /*here*/ double, DateTime>>();
// so I can do
_resultSelector.Add("foo", (DateTime dt, int x) => ...);
_resultSelector.Add("bar", (DateTime dt, double d) => ...);
_resultSelector.Add("gar", (DateTime dt, float f) => ...);
_resultSelector.Add("har", (DateTime dt, decimal d) => ...);
缺少:
- 制作我自己的字体;或
- 使用对象并装箱一个值类型并拆箱;或
- 使用
dynamic
关键字,
在 C# 中是否有正确的方法来做到这一点?
我猜 Java 有一个 Number
可能符合我的要求的类,但我想知道 C# 是否有类似的东西。
我猜 C# 中没有这样的东西,但我想我会问一下以确定。
最佳答案
不,没有。泛型和算术运算( +
、 -
、 *
、 /
等)根本无法一起工作。这是一个多次提出的问题,C# 设计委员会从未解决过(公平地说,这个功能也需要在 CLR 上工作,正如 Eric Lippert 在进一步链接的回答中指出的那样)。
奇怪的是,如果您检查 .NET Framework 的源代码,您会发现在某个开发阶段有一个 IArithmetic<T>
接口(interface),但它被废弃了;见here .
您可以在这个 SO answer 中阅读更多相关信息.
关于c# - C# 中是否有泛型数字类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099576/