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。。。看起来更好,更容易添加