我试图这样做。
void Test(int num)
{
}
Function(Test(1)); //Error
如何编写我的函数来允许这个? 我试过这个,但它没有用。
void Function(Action<int> action);
只有在我不准确这样的整数时才有效。
Function(Test); //Compile but I can't precise the integer
谢谢
答案 0 :(得分:1)
如何写我的函数来允许这个?
将功能的定义更改为
void Function(Action action);
现在,您可以将其称为
Function(()=>Test(1))
如果您无法更改功能的定义,可以将其命名为
Function((_)=>Test(1))
答案 1 :(得分:0)
这个Function(Test(1));
不是有效的C#语法,使用()
基本上是调用函数,而不是传递它。
你只能在函数期望一个类型时执行该操作,并且该函数将返回它。
Func和Action,是一个预定义的删除,您可以在不定义自己的情况下使用。
像这样:
public static void Test(int i)
{
Console.WriteLine("Test()");
}
public static int GetNumber()
{
return 5;
}
Test(GetNumber());
如果你想将一个函数传递给另一个函数,有很多方法可以做,取决于函数是否需要参数,是否有返回类型。
一个参数且没有返回类型
public static void PrintNumber(int num)
{
Console.WriteLine(num);
}
public static void Function(Action<int> predicate, int param)
{
predicate(param);
}
Function(PrintNumber,5);
一个参数和一个返回类型
public static int Test(int num)
{
return num ;
}
public static void Function(Func<int,int> predicate, int param)
{
predicate(param);
}
Function(Test, 5);
这个Func<int,int>
的第一个int是参数类型,你最多可以有15个我认为加一个是最后一个返回类型。
从这里你可以谷歌休息,希望这有帮助:)