2010-05-06 5 views
9

Parece que la suma no está definida para IEnumerable<uint> (y otros enteros sin signo, para el caso)Por qué no hay suma() de extensión para IEnumerable <uint>

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

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

me gustaría saber:

  • ¿He hecho algo fundamentalmente erróneo/malentendido la situación?
  • ¿Qué decisiones de diseño pueden causar la omisión de IEnumerable<uint>.Sum()?

MSDN: Enumerable.Sum

+0

Siempre puede hacer uno usted mismo ... – Kyte

+0

Gracias por lo obvio. ;) – dss539

+1

Todas las características comienzan en -100: http://blogs.msdn.com/ericgu/archive/2004/01/12/57985.aspx – Trillian

Respuesta

0

Podría ser simplemente un descuido. Me acuerdo de ForEach, que está disponible en las Listas pero no en IEnumerable. Escribí .ForEach como un método de extensión para IEnumerable en al menos 3 proyectos.

+5

... Excepto que 'ForEach' no era un descuido. No se incluyó deliberadamente en los métodos de extensión 'IEnumerable', ya que están destinados a ser funcionales, y' ForEach' no funciona fundamentalmente. Dicho esto, ** debe ** ser un método de extensión en IList; ver [aquí] (https://connect.microsoft.com/VisualStudio/feedback/details/552410/move-lots-of-helpful-methods-from-list-to-ilist-using-extension-methods) (y upvote !). –

+0

Hecho, ¡gracias por el aviso! – mwilson

6

Solo una suposición: Porque uint no es compatible con CLS. No estoy seguro de si eso pesaría en su decisión de no apoyarlo.

+1

Sí, eso lo haría. Ver [aquí] (http://stackoverflow.com/questions/6325/why-are-unsigned-ints-not-cls-compliant) –

+0

+1 Buena conjetura, pero no definitiva. – dss539

Cuestiones relacionadas