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