C # 메서드 명명 규칙 : ToSomething 대 AsSomething


82

비즈니스 로직 객체에 대한 확장 메서드를 작성하면서 변환 메서드의 이름을 바꾸는 문제에 도달했습니다. someObject.ToAnotherObject()널리 사용되는 object.ToString().

그러나 예를 들어 LINQ는 두 변형을 혼합하여 차이점을 찾을 수 없습니다. ToDictionary(), ToList(), AsParallel(), AsQueryable(), ...

이 두 가지 명명 규칙의 차이점은 무엇이며 내 클래스에 사용할지 여부를 결정하려면 무엇을 알아야합니까?

답변:


91

ToDictionary그리고 ToList접두어 To가 반드시 원래의 수집 또는 속성의 구조 정체성을 보존하지 않기 때문에.

  • 를로 변환하면 완전히 새로운 구조의 컬렉션 List<T>Dictionary<K, V>생성됩니다.
  • 변형 HashSet<T>(A) 내로하면 List<T>세트의 고유성 속성을 제거한다.

접두사가 붙은 메서드 As는 이러한 작업 을 수행하지 않습니다. 단순히 원본 컬렉션 의 대체 보기 를 제공합니다 . 그들은 그것을 풍부하게합니다.


41
그래서, 사과에 나는 부를 수 .AsCleanApple()난 단지 그것을 세척 할 필요가 있기 때문에, 그리고 .ToFruitSalad()내 칼이 apple‽의 구조 변경 때문에
Physikbuddha

3
@Physikbuddha 기본적으로 그렇습니다.
MKII

38
@Physikbuddha는 같은 날 것으로 보인다 AsCleanApple것이다 변경 사과에 대해 뭔가. 더 나은 비유는 다음과 같습니다AsFruit
dcastro

4
.AsCleanAppleSource()사과의 원천이었던 것을 깨끗한 사과의 원천으로 바꾸는 것입니다. 필요한 경우 세척 단계를 추가하지만 아마도 아무것도하지 않을 수도 있습니다. 사과는 이미 깨끗하다고 ​​알려져 있습니다. .ToPunnet()그 소스에 액세스하여 사과의 punnet을 제공합니다.
Jon Hanna

2
이것은 엄격하게 사실이 아니지만 일반적으로 "AsXXX ()"를 캐스트로, "ToXXX ()"를 변환으로 생각할 수 있습니다.
nateirvin

26

Linq에서 ToXXX메서드는 모두 쿼리를 실행하고 결과에서 새 개체를 만드는 반면 AsXXX메서드는 어떤 방식 으로든 다른 새 쿼리를 생성합니다. 그것은 동일한 개체 수 있지만 (다른 인터페이스를 통해 액세스 할 수 있습니다 AsEnumerable()이 수행) 또는 새로운 객체가 될 수 달라져 기능 (다른 방법 그들은 단지 주어진 객체를 반환 할 경우 몇 가지 검사를 볼 수 있지만 예를 들어,이 작업을 수행 할 AsQueryable()것입니다 이미 source구현되어 있으면 반환 IQueryable<T>하거나 EnumerableQuery<TElement>그렇지 않으면 새로 만듭니다 ).


that alters how the functionality- how불필요하거나 진술의 다음 부분이 있어야합니까?
Kapol

@Kapol 아니요, 작성과 입력을 동시에하여 발생한 오타입니다.
Jon Hanna

나는 이것이 정답이라고 생각합니다. 즉, 원래 인스턴스의 활성 대 정적 투영입니다. ToXXX()원본과 관계없이 데이터를 투영합니다. AsXXX()원본과 적극적인 관계를 유지합니다 (적어도 우리가 논의중인 Enumerable / Queryable 예제에서).
Tim Medora

ToXXX execute the query및에 대한 +1 AsXXX produce a new query. 내가 LINQ에서 읽은 것에서 옳게 들리며 MSDN은 ToXXX대해 확인하는 것처럼 보이지만 모든 AsXXX 메서드가 지연된 실행 인지 여부에 대한 소스가 있는지 궁금합니다 .
brichins

1
@brichins는 우리 중 누구라도 AsXXXLinq에 내재 된 것 (예 : Entity Framework AsParallel에서 AsNoTracking제공하는 PLinq에 의해 추가 된 것 , 등등). 확실히 linq의 핵심은 Queryable및 로 정의 된 것이며이 Enumerable두 클래스는 모두 해당 규칙을 따릅니다. 대부분의 추가 사항은 "모두"가 정확할 수있는 정도까지 적용되지만 항상 정확하다고 보장하기에는 너무 개방적입니다 (단절이 디자인 결함이라고 생각하지만).
Jon Hanna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.