【发布时间】:2018-05-18 20:27:46
【问题描述】:
我正在尝试创建一个将 Func 作为参数的扩展方法,但出现错误。这是我得到的:
public static class MyExtensions
{
public static TResult ModifyString<T, TResult>(this string s, Func<T, TResult> f)
{
return f(s);
}
}
在return f(s); 行我收到一个错误:Error CS1503 Argument 1: cannot convert from 'string' to 'T'
如何使用泛型参数 T 和泛型返回类型 TResult 指定泛型 lambda Func?
【问题讨论】:
-
您正确指定了 lambda。问题是它的参数是
T类型,并且您正在向它传递一个字符串,但是编译器没有任何通用方法可以将字符串转换为“绝对任何类型”,这就是T可以做到的。 -
用字符串类替换 T 或提供类似“where T: string”的概念
-
显然,您希望
f成为作用于字符串的函数。你想要的似乎是TResult ModifyString<TResult>(this string s, Func<string, TResult> f) => f(s);。要么,要么TResult ModifyString<T, TResult>(this T t, Func<T, TResult> f) => f(t); -
@KirillKorolev:你不能这样做
where T : sealedtype。where T : string与“T 必须始终是字符串”相同,那么为什么要使用 T 呢? -
@EricLippert 是的,这就是我好奇的原因,他为什么需要模板参数。
标签: c# .net lambda generic-type-argument extension-function