c# - practicas - estándares de nomenclatura
Convenciones de nomenclatura del método C#: ToSomething vs. AsSomething (2)
Mientras escribía algunos métodos de extensión para mis objetos de lógica de negocios, llegué a la cuestión de cambiar el nombre de los métodos de conversión.
someObject.ToAnotherObject()
iría bien con el
object.ToString()
ampliamente utilizado.ToString
object.ToString()
.
Sin embargo, LINQ, por ejemplo, mezcla ambas variantes y no puedo encontrar una diferencia entre ellas.
ToDictionary()
,
ToList()
,
AsParallel()
,
AsQueryable()
, ...
¿Cuáles son las diferencias entre estas dos convenciones de nombres y qué debo saber para decidir si usarlas para mis propias clases?
En Linq, todos los métodos
ToXXX
ejecutan la consulta y crean un nuevo objeto a partir de los resultados, mientras que los métodos
AsXXX
producen una nueva consulta que es diferente de alguna manera.
Puede ser el mismo objeto pero se accede a él a través de una interfaz diferente (
AsEnumerable()
hace esto) o puede ser un nuevo objeto que altera la funcionalidad (los otros métodos hacen esto, aunque algunos verifican si pueden devolver el objeto dado , por ejemplo,
AsQueryable()
devolverá el
source
si ya implementa
IQueryable<T>
, o si crea un nuevo
EnumerableQuery<TElement>
contrario).
ToDictionary
y
ToList
tienen el prefijo
To
porque no necesariamente conservan la identidad estructural de la colección original o sus propiedades.
-
Transformar una
List<T>
en unDictionary<K, V>
crea una colección con una estructura completamente nueva. -
Transformar un
HashSet<T>
en unaList<T>
elimina la propiedad de unicidad de los conjuntos.
Los métodos con el prefijo
As
no hacen ninguna de estas cosas: simplemente proporcionan una
vista
alternativa de la colección original.
Ellos lo enriquecen.