首先,我是高级程序设计的完全初学者.我所做的就是在网上找到的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;
}
}
Run Code Online (Sandbox Code Playgroud)
代码块2:
public class ClassName2 : blah1 , blah2, blah3
{
public void Method1(string DummyString)
{
DummyClassName.DummyTemplateFunc(_aaa1, ()=>Function1(_arg1, arg2));
}
}
Run Code Online (Sandbox Code Playgroud)
我会尽力解释发生了什么事情.第二位代码在程序中反复使用,使用不同的函数(或方法?)代替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.'
Run Code Online (Sandbox Code Playgroud)
据我所知,这是因为当传递一个void函数时,它取代了第一个代码块中的T并尝试返回'val'.这就是抛出错误的原因.
有人可以帮我找到解决方法吗?我不介意专门定义一个完全不同的类/方法来处理void函数.我知道哪些函数的返回类型为void.
创建另一个重载,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
}
}
Run Code Online (Sandbox Code Playgroud)