그래서 위의 내용을 이해하지 못했습니다. 마찬가지로확장 일반 매개 변수와 Func 인수 일반 매개 변수 간의 관계
public static TElement StringMatch<TElement, TData>(
this IEnumerable<TElement> source,
Func<TElement, TData> selector)
모든 여기 괜찮습니다 .... 당신이 그렇게 같은 열거 형에 확장자를 가진 가정,하지만 난 StringMatch 일반적인 매개 변수는 Func<>
무엇을하기 때문에, Func을 일반적인 매개 변수를 반영한다고 가정했습니다 전달 될 사용자에게 표시됩니다.
그러나 내가 Func<>
의 반환 형식은 어쩌면
Func<TElement, string>
처럼 특정 매개 변수로 지정하고 싶은 말은 이제 내 생각은 ...
public static TElement StringMatch<TElement, string>(
this IEnumerable<TElement> source,
Func<TElement, string> selector)
과 같이 서명을 변경하는 것입니다. ..again, 통과 된 Func <>을 비추는 것. 내가 Books.StringMatch(b => b.Title)
같은에서이 작업을 호출하려고하면, 나는
'Book' does not contain a definition for 'StringMatch' and no extension method 'StringMatch' accepting a first argument of type 'Book' could be found (are you missing a using directive or an assembly reference?)
그래서 거래는 여기에 무슨 ...과 같은 오류 얻을? 무엇 정확히 확장 메서드에서 제네릭 매개 변수를 지정합니까? 당신이
public static TElement StringMatch<TElement, TData>(
this IEnumerable<TElement> source,
Func<TElement, TData> selector)
이 있으면
"TData"라는 형식을 찾기 위해 컴파일러에 요청하기 때문에 두 번째 서명이 컴파일되지 않습니다. 제네릭 메서드 정의에 포함시키지 않으므로 컴파일러는 TData가 제네릭 형식 매개 변수가되어야한다는 것을 모릅니다. 어쩌면 나는 정말로 뭔가 빠졌지 만, StringMatch에서 원하는 것을 정교하게 만들 수 있습니까? – Vincent
죄송합니다. 지금 실수로 편집 중입니다 ... – MassStrike