无法从用法中推断出方法的类型参数。 (c#,lambda)

时间:2014-01-17 19:15:20

标签: c# lambda void

首先,我是高级程序设计的完全初学者。我所做的就是在网上找到的C ++教程。我在工作中遇到这个问题。我见过类似的问题,但没有任何帮助我理解。

请注意:我在方法,对象,界面等术语上很糟糕。所以我可能在某处进一步犯了错误。我正在慢慢学习。

代码块1:

public static class DummyClassName
{
    public static T DummyTemplateFunc<T>(DummyInterfaceName aaa1, Func<T> action)
    {
        T DummyVal = action();
        // blah blah code
        // blah blah code

        return val;
    }
}

代码块2:

public class ClassName2 : blah1 , blah2, blah3
{
    public void Method1(string DummyString)
     {
         DummyClassName.DummyTemplateFunc(_aaa1, ()=>Function1(_arg1, arg2));
     }
}

我会尽力解释发生了什么事情。第二位代码在程序中反复使用,使用不同的函数(或方法?)代替Function1。 (这些函数来自与此链接的C ++程序。我不知道如何)

如果这些函数属于任何返回类型EXCEPT void,则程序运行正常。

如果使用void-return-type函数,我会收到错误

"The type arguments for method '****.****.DummyClassName.DummyTemplateName<T>
(****.****.DummyInterfaceName, System.Func<T>)' cannot be inferred from the usage. 
Try specifying the type arguments explicitly.' 

据我所知,这是因为当传递一个void函数时,它取代了第一个代码块中的T并尝试返回'val'。这就是抛出错误的原因。

有人可以帮我找到解决方法吗?我不介意专门定义一个完全不同的类/方法来处理void函数。我知道哪些函数的返回类型为void。

1 个答案:

答案 0 :(得分:5)

创建另一个重载,取Action代替Func<T>

public static class DummyClassName
{
    public static void DummyTemplateFunc(DummyInterfaceName aaa1, Action action)
    {
        // you cannot assign result to variable, because it returns void
        action();

        // I also changed method to return void, so you can't return anything
        // return something;

        // ofc you can make it return something instead
    }
}