C# 使用Func在函数中实现泛型

C# 使用Func在函数中实现泛型,c#,generics,func,C#,Generics,Func,我有一个如下静态功能: public static string codeList<T>(List<T> thelist, Func<T, string> coder); 公共静态字符串代码列表(列表、函数编码器); 对我自己的对象使用此函数不是问题,例如: string code = codeList<MyClass>(myclassList, MyClass.code); string code=codeList(myclassList,

我有一个如下静态功能:

public static string codeList<T>(List<T> thelist, Func<T, string> coder);
公共静态字符串代码列表(列表、函数编码器);
对我自己的对象使用此函数不是问题,例如:

string code = codeList<MyClass>(myclassList, MyClass.code);
string code=codeList(myclassList,MyClass.code);
其中MyClass.code是一个静态函数(在MyClass中定义),它获取MyClass并返回字符串

问题是当我尝试将此函数与
List
List
一起使用时,我现在所做的是预定义静态,如
Func intCoder=(x)=>x.ToString()
Func(x)=>x.ToString()并使用它们。
还有别的办法吗?比如:

string code = codeList<int>(intList, Int32.ToString);
string code=codeList(intList,Int32.ToString);
您可以使用

string code = codeList<int>(intList, Convert.ToString);
string code=codeList(intList,Convert.ToString);
碰巧的是,他有一个合适的签名

问题在于,它的重载没有一个具有适当的签名(它们没有隐含的
int
参数)。在这种情况下,除了定义适配器函数之外,您将无能为力。

您可以使用

string code = codeList<int>(intList, Convert.ToString);
string code=codeList(intList,Convert.ToString);
碰巧的是,他有一个合适的签名


问题在于,它的重载没有一个具有适当的签名(它们没有隐含的
int
参数)。在这种情况下,除了定义一个适配器函数,您将无能为力。

您不必为func声明变量。您可以将lambda表达式作为参数值

string code = codeList(intList, i => i.ToString());

您不必为func声明变量。您可以将lambda表达式作为参数值

string code = codeList(intList, i => i.ToString());

@sll:我更改了它,似乎最合理的是关于泛型。@sll:我更改了它,似乎最合理的是关于泛型。再者,阿米拉姆,这不是问题所在,我不想创建新函数(是的,调用I=>I.ToString()创建一个新函数)我的假设是,像C#这样的富语言会有这种函数,而我的假设似乎是正确的,因为Convert.ToString可以实现这种功能。这是在创建一个新函数,但它给了您更多的灵活性。通过这种方式,您可以使用Int32.ToString具有的任何重写。您不能只传递对
Convert.ToString()
的引用。同样,这不是问题所在,我不想创建一个新函数(是的,调用I=>I.ToString()会创建一个新函数)我的假设是,像C#这样的富语言会有这种函数,而我的假设似乎是正确的,因为Convert.ToString可以实现这种功能。这是在创建一个新函数,但它给了您更多的灵活性。通过这种方式,您可以使用Int32.ToString具有的任何重写。您不能只传递对
Convert.ToString()
的引用。