如何指定方法作为我方法的参数?

use*_*628 3 c# methods

C#的新手,我如何创建一个接受方法作为其参数之一的方法?

听起来有点奇怪,但我希望它能在c#中得到支持.

我试过的:

public void CalculateRepairedCars(int total, /*here I want to pass a method..*/)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是我想传递的方法:

public int Calculate{int totalCars, Condition condition}
{
...
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 7

"将一个方法放在一个值中"(在C#中可以做很多事情,比如作为参数传递给另一个方法)被称为创建该方法委托.

委托具有直接对应于其指向的方法的签名的类型(即其参数的数量和类型以及返回值).C#为没有返回值(Action和它的兄弟节点)的代表以及那些(Func和它的兄弟节点)的代表提供现成的类型.

在您的情况下,Calculate匹配的签名类型,Func<int, Condition, int>所以你会写

public void CalculateRepairedCars(int total, Func<int, Condition, int> calc)
{
    // when you want to invoke the delegate:
    int result = calc(someCondition, someInteger);
}
Run Code Online (Sandbox Code Playgroud)

并使用它

CalculateRepairedCars(i, Calculate);
Run Code Online (Sandbox Code Playgroud)