비즈니스 로직 객체에 대한 확장 메서드를 작성하면서 변환 메서드의 이름을 바꾸는 문제에 도달했습니다. someObject.ToAnotherObject()
널리 사용되는 object.ToString()
.
그러나 예를 들어 LINQ는 두 변형을 혼합하여 차이점을 찾을 수 없습니다. ToDictionary()
, ToList()
, AsParallel()
, AsQueryable()
, …
이 두 가지 명명 규칙의 차이점은 무엇이며 내 클래스에 사용할지 여부를 결정하려면 무엇을 알아야합니까?
답변
ToDictionary
그리고 ToList
접두어 To
가 반드시 원래의 수집 또는 속성의 구조 정체성을 보존하지 않기 때문에.
- 를로 변환하면 완전히 새로운 구조의 컬렉션
List<T>
이Dictionary<K, V>
생성됩니다. - 변형
HashSet<T>
(A) 내로하면List<T>
세트의 고유성 속성을 제거한다.
접두사가 붙은 메서드 As
는 이러한 작업 을 수행하지 않습니다. 단순히 원본 컬렉션 의 대체 보기 를 제공합니다 . 그들은 그것을 풍부하게합니다.
답변
Linq에서 ToXXX
메서드는 모두 쿼리를 실행하고 결과에서 새 개체를 만드는 반면 AsXXX
메서드는 어떤 방식 으로든 다른 새 쿼리를 생성합니다. 그것은 동일한 개체 수 있지만 (다른 인터페이스를 통해 액세스 할 수 있습니다 AsEnumerable()
이 수행) 또는 새로운 객체가 될 수 달라져 기능 (다른 방법 그들은 단지 주어진 객체를 반환 할 경우 몇 가지 검사를 볼 수 있지만 예를 들어,이 작업을 수행 할 AsQueryable()
것입니다 이미 source
구현되어 있으면 반환 IQueryable<T>
하거나 EnumerableQuery<TElement>
그렇지 않으면 새로 만듭니다 ).