所以我想我并不真正了解上述情况。就像假设你有上枚举类型,像这样的扩展....扩展通用参数与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?)
那么,这里的交易?什么正好做扩展方法指定的通用参数?
由于您要求编译器查找名为“TData”的类型,因此您的第二个签名将不会编译。由于您没有将其包含在泛型方法定义中,因此编译器不知道TData应该是泛型类型参数。也许我真的错过了一些东西,但是你可能会详细说明你想要StringMatch做什么? – Vincent
哎呀,这实际上是一个错误,现在编辑... – MassStrike