c# - sintaxis - Acerca de la clase System.Linq.Lookup
linq notation c# (2)
Encontré esta clase mientras leía un libro de C # y tengo algunas preguntas.
- ¿Por qué se agrega esto al espacio de nombres System.Linq y no al habitual espacio de nombre Collections?
- Cuál es la intención detrás de esta clase
- ¿Por qué esta clase no está destinada a la creación de instancias directas? Esto está disponible solo a través de la extensión ToLookup, ¿verdad?
Propósito de la clase: un diccionario donde una clave se puede asignar a múltiples valores. Piense que es para agrupar en lugar de mapeo uno a uno.
Solo a través de la decisión de ToLookup: pase. De nuevo, parece una mala llamada para mí. Por otro lado, significa que el resultado es inmutable para el mundo exterior, lo cual es bastante agradable. Es bastante fácil escribir tu propia colección que apoye esto, por supuesto, pero hubiera sido bastante agradable tenerlo en las colecciones "correctamente". Mi suposición es que MS no tenía el tiempo ni el dinero para pasar por el diseño / prueba bastante riguroso requerido para convertirlo en una decisión de primera clase para las colecciones.
Decisión del espacio de nombres: Probablemente relacionado con lo anterior. Tener una versión en System.Collections.Generic que no podrías crear tú mismo habría sido un poco extraño.
Como nota aparte, tenga en cuenta que MiscUtil también incluye una clase MiscUtil.Linq.EditableLookup<,>
, que es similar; implementa la ILookup<,>
regular ILookup<,>
, pero es totalmente mutable, por lo que puede crearlo y agregar sus propios valores.