C#泛型方法传委托报类型无法推断错误如何调整方法定义
问题原因
你当前的泛型方法仅声明了1个泛型参数T,约束了三个类型必须完全相同:
- 两个输入
IEnumerable的元素类型为T - 传入委托的入参类型为
T - 传入委托的返回值类型为
T
但你要传入的委托是Func<char, bool>,入参类型是char、返回值类型是bool,二者类型不一致,编译器无法找到同时满足T=char和T=bool的类型,因此抛出类型推断失败的错误。
修正方案
将方法的泛型参数拆分为两个,分别对应输入序列的元素类型、委托的返回值类型,让返回的IEnumerable类型和委托返回值类型对齐即可,修正后的方法定义如下:
public static IEnumerable<TResult> MyMethod<TSource, TResult>( IEnumerable<TSource> s1, IEnumerable<TSource> s2, Func<TSource, TResult> funcDel) { // 填充你的业务逻辑 }
修正后你就可以正常传入Func<char, bool>类型的委托了,此时泛型会自动推断TSource=char、TResult=bool,方法返回值就是IEnumerable<bool>,和委托返回类型完全一致。
调用示例
Func<char, bool> sampleF = (ch) => char.IsLetter(ch); // 可正常编译调用,result类型为IEnumerable<bool> var result = MyMethod(new List<char>{'a','1'}, new List<char>{'b','2'}, sampleF);
内容的提问来源于stack exchange,提问作者Ghimbo21
相关产品推荐
相关产品推荐

