2009-04-18 10 views
8

Predicate<TObject>이 겉으로보기에는 완전히 책임있는 옵션 일 때을 사용하는 API (특히 .NET 프레임 워크에서)를 여러 번 보았습니다. 어떤 좋은 이유는 API 디자이너 그렇게 할 수 있을까요?Func <TObject, bool> 또는 술부 <TObject>?

답변

7

, 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 더 설명 생각합니다. 당신이 생각하기에, ActionFunc 델리게이트 타입에 대해서만 알 필요가 있다고 말하는 것이 있습니다 ...

+0

네, 답이 이것보다 좋아지지 않을까 걱정됩니다. 이것은 일종의 코드 관료주의가 순결의 측면에서 승리 한 것과 같습니다. (즉, 일관성에도 불구하고 항상 술어를 사용해야합니다). –

2

나머지 LINQ와의 일관성?

합니다 (이 "이상"언급되었지만, 익명의 대의원 및 람다 함수와 그렇게 차이를 인식 할 필요가 거의 절대, 차이가 없습니다.)

+0

네,하지만 왜 LINQ가 그랬습니까? –

+0

나는 또한 LINQ의 나머지 부분과 "일관성"이 이 좋다고 생각하지 않는다. 이유. –

+0

한 가능성에 대한 Jon의 답변을 참조하십시오. – Richard

0

는 Func을 <> 대표는 "새로운 "방법에 lambdas/delegate를 지정하는 방법. 그러나, 편리한 대리인 집합이 있으며, 동일한 작업을 수행하는보다 구체적인 대리자가있는 경우이를 수행하십시오. 난 항상 훨씬 더 자기 문서화이기로 술어 <> 가고 싶어 당신의 예에서

LINQ에서
관련 문제