C# C函数作为参数

C# C函数作为参数,c#,function,delegates,arguments,C#,Function,Delegates,Arguments,我需要帮助。我正在做一个程序,我有一个问题 我已经有一个具有委托的构造函数: public delegate bool delIsDone(int curState, int needState); public Progress(delIsDone doneFunction) { ... } 我需要传递它而不在创建之外创建它: public bool check() { return true } Progress p = new Progress(check); 我需要这样做: Pr

我需要帮助。我正在做一个程序,我有一个问题

我已经有一个具有委托的构造函数:

public delegate bool delIsDone(int curState, int needState);
public Progress(delIsDone doneFunction) { ... }
我需要传递它而不在创建之外创建它:

public bool check() { return true }
Progress p = new Progress(check);
我需要这样做:

  Progress p = new ProgressChecker(bool check(int currentProgress, int needProgress) {
    return currentProgress < needProgress;
  });
其中ProgressChecker是具有检查进度的方法的类

在循环中,我执行此函数以获得结果。若函数返回true,则表示获得了成就,我需要保留它


Thx的帮助

在构造函数中,您可以传入如下函数:

ProgressCheckerFunc检查器

这意味着您可以将函数传递到ProgressChecker的构造函数中

您可以按如下方式传递委托实例:

public class Program
{
    public delegate bool delIsDone(int curState, int needState);

    public static bool checkNumbers(int a, int b)
    {
        return a < b;
    }

    public static void Main(string[] args)
    {
        var t = new ProgressChecker(new delIsDone(checkNumbers)); 
    // OR var t = new ProgressChecker(new delIsDone((a, b) => { return a < b; }));           
    }
}

在构造函数中,可以传入如下函数:

ProgressCheckerFunc检查器

这意味着您可以将函数传递到ProgressChecker的构造函数中

您可以按如下方式传递委托实例:

public class Program
{
    public delegate bool delIsDone(int curState, int needState);

    public static bool checkNumbers(int a, int b)
    {
        return a < b;
    }

    public static void Main(string[] args)
    {
        var t = new ProgressChecker(new delIsDone(checkNumbers)); 
    // OR var t = new ProgressChecker(new delIsDone((a, b) => { return a < b; }));           
    }
}

您还可以创建表达式树,这是我的代码片段,它可以轻松地转换为您的示例

        //easy way
        Expression<Action<int>> printExpr = (arg) => Console.WriteLine(arg);
        printExpr.Compile()(10);

        //hard way
        ParameterExpression param = Expression.Parameter(typeof(int), "arg");
        MethodCallExpression methodCall = Expression.Call
            (
                  typeof(Console).GetMethod("WriteLine", new[]
                  {
                      typeof(int)
                  }
             ),
             param
          );

        Expression.Lambda<Action<int>>(methodCall, param).Compile()(10); //execution

更多信息可以在

中收集。您还可以创建表达式树,这是我的代码片段,可以轻松地转换为您的示例

        //easy way
        Expression<Action<int>> printExpr = (arg) => Console.WriteLine(arg);
        printExpr.Compile()(10);

        //hard way
        ParameterExpression param = Expression.Parameter(typeof(int), "arg");
        MethodCallExpression methodCall = Expression.Call
            (
                  typeof(Console).GetMethod("WriteLine", new[]
                  {
                      typeof(int)
                  }
             ),
             param
          );

        Expression.Lambda<Action<int>>(methodCall, param).Compile()(10); //execution

更多信息可在

处收集。我已经有一名代表。我在构造函数中使用了它。但如何在不创建函数的情况下传递函数呢?比如:公共空间。。。新ProgressChecker此时我正在创建函数,然后将其传递给构造函数。但是我可以像传递新的PMyFunction{return 1;}一样传递它吗?谢谢你:newdelisdonea,b=>{returna。。。看起来好多了,我已经有了一个代表。我在构造函数中使用了它。但如何在不创建函数的情况下传递函数呢?比如:公共空间。。。新ProgressChecker此时我正在创建函数,然后将其传递给构造函数。但是我可以像传递新的PMyFunction{return 1;}一样传递它吗?谢谢你:newdelisdonea,b=>{returna。。。看起来更好,更容易添加