C#:具有未知签名的通用方法表达式

时间:2019-04-23 23:53:37

标签: c# .net generics lambda generic-programming

例如,我们有一个通用方法

public void Test<T>(T param, Action<T> callback)
{

}

如果使用某些参数调用此方法,它将自动检测T的类型,而无需显式声明它。

例如:

// here 'int' detected
Test(1, (intVariable) =>
{

});

// here 'string' detected
Test("hello", (stringVariable) =>
{

});

现在,是否有任何方法可以对方法进行相同处理。例如

Test(int.Parse, (parseMethod) =>
{
    parseMethod("11");
});

是的,具有相同名称的方法可以具有不同的签名,并且无法检测到要使用哪个签名作为参数,但是可能有些接近。

1 个答案:

答案 0 :(得分:0)

您必须显式转换为Func<string, int>才能完成此工作:

Test((Func<string, int>)int.Parse, (parseMethod) =>
{
    parseMethod("11");
});