为什么IEnumerable <uint>没有Sum()扩展名

dss*_*539 10 .net

似乎没有为IEnumerable<uint>(以及其他无符号整数)定义Sum

var s = new int[] { 1, 2, 3 };
s.Sum(); //works fine

var us = new uint[] { 1, 2, 3 };
us.Sum(); //missing method
Run Code Online (Sandbox Code Playgroud)

我想知道:

  • 我做过一些根本错误/误解了这种情况吗?
  • 哪些设计决策可能导致遗漏IEnumerable<uint>.Sum()

MSDN:Enumerable.Sum

Pat*_*ele 6

只是一个猜测:因为uint不符合CLS.不确定这是否会影响他们不支持它的决定.


mwi*_*son 0

这可能只是一个疏忽。我想起了ForEach,它在列表上可用,但在 IEnumerable 上不可用。我在至少 3 个项目中编写了 .ForEach 作为 IEnumerable 的扩展方法。

  • ...除了“ForEach”不是一个疏忽。它故意不包含在“IEnumerable”扩展方法中,因为这些方法是功能性的,而“ForEach”从根本上来说不是功能性的。也就是说,它**应该**是 IList 中的扩展方法;请参阅[此处](https://connect.microsoft.com/VisualStudio/feedback/details/552410/move-lots-of-helpful-methods-from-list-to-ilist-using-extension-methods)(并投票!)。 (8认同)