Соглашения о присвоении имен в С#: ToSomething vs. AsSomething
Поскольку я писал некоторые методы расширения для своих объектов бизнес-логики, я пришел к вопросу о переименовании методов преобразования. someObject.ToAnotherObject()
будет хорошо сочетаться с широко используемым object.ToString()
.
Однако LINQ, например, смешивает оба варианта, и я не могу найти разницу между ними. ToDictionary()
, ToList()
, AsParallel()
, AsQueryable()
,...
Каковы различия между этими двумя соглашениями об именах и что я должен знать, чтобы решить, использовать ли для моих собственных классов?
Ответы
Ответ 1
ToDictionary
и ToList
имеют префикс To
, потому что они не обязательно сохраняют структурное идентичность исходной коллекции или ее свойств.
- Преобразование a
List<T>
в Dictionary<K, V>
создает коллекцию со всей новой структурой.
- Преобразование a
HashSet<T>
в List<T>
удаляет свойство уникальности множеств.
Методы с префиксом As
не выполняют никаких из этих действий - они просто предоставляют альтернативный вид исходной коллекции. Они обогащают его.
Ответ 2
В Linq методы ToXXX
все выполняют запрос и создают новый объект из результатов, тогда как методы AsXXX
создают новый запрос, который каким-то образом отличается. Это может быть тот же объект, но доступ через другой интерфейс (AsEnumerable()
делает это), или это может быть новый объект, который изменяет функциональность (другие методы делают это, хотя некоторые проверки, чтобы проверить, могут ли они просто вернуть данный объект, например AsQueryable()
будет возвращать source
, если он уже реализует IQueryable<T>
или создает новый EnumerableQuery<TElement>
в противном случае).