Соглашения об именовании методов C#: ToSomething vs. AsSomething


когда я писал некоторые методы расширения для своих объектов бизнес-логики, я пришел к вопросу о переименовании методов преобразования. someObject.ToAnotherObject() было бы хорошо с широко используемым object.ToString().

однако LINQ, например, смешивает оба варианта, и я не могу найти разницу между ними. ToDictionary(),ToList(),AsParallel(),AsQueryable(), ...

каковы различия между этими двумя соглашениями об именах и что я должен знать, чтобы решить, следует ли использовать для моего собственного занятия?

2 81

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> в противном случае).