Predicate<TObject>
이 겉으로보기에는 완전히 책임있는 옵션 일 때을 사용하는 API (특히 .NET 프레임 워크에서)를 여러 번 보았습니다. 어떤 좋은 이유는 API 디자이너 그렇게 할 수 있을까요?Func <TObject, bool> 또는 술부 <TObject>?
답변
, Func<T, bool>
가 Where
때문에 그 같은 일에 사용됩니다 (술어를 가정하면 원하는 것입니다) 요소뿐만 아니라 인덱스를 가져 오며 다른 과부하가 일치 :
IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate)
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate)
는 개인적으로 나는 위의 같은 일관성 문제가 없다 어디 그래서
내가 상황에서 그것을 사용하는 것이, 이름
Predicate
더 설명 생각합니다. 당신이 생각하기에,
Action
과
Func
델리게이트 타입에 대해서만 알 필요가 있다고 말하는 것이 있습니다 ...
나머지 LINQ와의 일관성?
합니다 (이 "이상"언급되었지만, 익명의 대의원 및 람다 함수와 그렇게 차이를 인식 할 필요가 거의 절대, 차이가 없습니다.)
네,하지만 왜 LINQ가 그랬습니까? –
나는 또한 LINQ의 나머지 부분과 "일관성"이 이 좋다고 생각하지 않는다. 이유. –
한 가능성에 대한 Jon의 답변을 참조하십시오. – Richard
는 Func을 <> 대표는 "새로운 "방법에 lambdas/delegate를 지정하는 방법. 그러나, 편리한 대리인 집합이 있으며, 동일한 작업을 수행하는보다 구체적인 대리자가있는 경우이를 수행하십시오. 난 항상 훨씬 더 자기 문서화이기로 술어 <> 가고 싶어 당신의 예에서
는
LINQ에서- 1. 컴파일 후 Func <T, bool> 및 술부 <T>이 같은 일이 아닙니까?
- 2. 표현식 <func>?
- 3. Heredoc <<< 또는 <<?
- 4. 캡슐화 동작 <T> 및 Func <T>?
- 5. Expression.LessThan 대 LambdaExpression <Func <ParamType, object >>
- 6. Asp.net : <% # 또는 <%
- 7. 캐시 컴파일 <Func<T>>
- 8. 무엇을 사용합니까? 대리인, 이벤트 또는 Func <T>?
- 9. Func <T>은 암시 적으로 표현식 <Func<T>>으로 어떻게 변환됩니까?</p>이 <p>이 라인 모두 컴파일 :
- 10. Func <> 결과에 값을 할당하십시오.
- 11. Func <T, string> []을 Func <T, string[]>로 변환 하시겠습니까?
- 12. Func <T>에서 Func <Interface>에 할당 할 수 없습니다.
- 13. C# Func <> 및 제네릭
- 14. Lambda Func <> 및 Fluent
- 15. 이해 func <T, TResult> C#
- 16. Func <TSource, TKey> keySelector 오류
- 17. Out 매개 변수를 사용하여 Action <> 또는 Func <>을 사용할 수 있습니까?
- 18. Func <> (또는 Action <>)을 사용하거나 자체 대리자를 만드시겠습니까?
- 19. Enumerable <T>의 인스턴스를 캐스팅하는 방법. (술부)를 IEnumerable <T>에?
- 20. 식 <Func <T, bool>>을 술부로 변환하는 방법 <T>
- 21. 윈저 성 IOC의이 BaseService <TObject의, TRepository>에 IBaseService <TObject>을 등록하는 방법을
- 22. Expression <Func <T, T2, bool>> to Expression <Func <T2, bool>>을 T에 대한 상수를 도입하여 변환하십시오.
- 23. <script></script> 또는 <script />?
- 24. Lambda C#에서 그룹화 및 합계 도움말을 사용하려면 Func <IGrouping <int, 익명 형식, int> 또는 식 <Func <IGrouping <int, 익명 형식>, 소수점 >>이 필요합니다.
- 25. .NET 동작에 해당하는 Java <T> 및 Func <T,U> 등
- 26. Func <T,TResult>은 어떻게 작동합니까?
- 27. Func <string>을 통한 추적 메시지 포맷 지연?
- 28. 중첩 된 일반 식 반환 <Func <T, bool>>
- 29. 동적으로 Func <T,bool> 호출의 결과를 얻습니다.
- 30. * params없이 컴파일 된 동적 Linq Func <? *의 캐시 대리인입니까?
네, 답이 이것보다 좋아지지 않을까 걱정됩니다. 이것은 일종의 코드 관료주의가 순결의 측면에서 승리 한 것과 같습니다. (즉, 일관성에도 불구하고 항상 술어를 사용해야합니다). –