【发布时间】:2014-04-19 05:00:54
【问题描述】:
所以我想我不太了解上述内容。就像假设你有一个像这样的可枚举类型的扩展......
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)
...再次,镜像传递的 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 做什么?
-
糟糕,这实际上是一个错误,现在正在编辑...
标签: c# .net linq generics extension-methods