C# 带参静态方法Inspect为何可直接作为委托传入Rule构造函数
为什么可以直接将静态方法
Inspect作为构造参数传入,不需要附带自身实参 匹配规则核心
- 根据提供的
Rule<T>元数据,构造函数第三个入参的要求为Func<T, Rule, InspectionResult> inspectionFunction,这是一个强类型委托,约束了传入内容的格式:必须是一个能接收2个输入参数(依次为泛型类型T、Rule类型)、返回值为InspectionResult的可调用方法。 - 你定义的静态方法
Inspect(IWorkflowModel workflowModel, Rule ruleInstance)和这个委托的签名完全匹配:当前初始化的是Rule<IWorkflowModel>,对应的泛型T就是IWorkflowModel,参数类型、返回值不存在任何不兼容。 - 编译器识别到签名匹配后,会自动完成方法组转换,把
Inspect方法转换成对应的委托实例传入构造函数,无需手动写new Func<IWorkflowModel, Rule, InspectionResult>(Inspect)这类冗余的显式转换代码。
带括号传参和不带括号的本质区别
- 写成
Inspect(paramA, paramB)的写法,本质是立刻执行方法、把方法运行后的返回值(InspectionResult对象)传入构造函数,但构造函数需要的并非方法执行结果,而是要把“可被后续调用的方法逻辑”存入自身的Inspect属性,等规则引擎真正执行校验时再反向调用这个方法。 - 你的猜测方向是准确的:这种传参模式是典型的逻辑解耦,你在初始化规则时只需要告诉引擎“校验逻辑要调用哪个方法”,真正触发校验时,UiPath规则引擎会自动把当前正在扫描的
IWorkflowModel对象、当前触发校验的Rule实例作为实参传入Inspect方法,完全不需要你在初始化阶段手动提供这些运行时才存在的对象。
踩坑提示:如果写
Inspect()哪怕填对了所有参数,传入的也是方法返回值而非方法本身,会直接因为类型不匹配触发编译错误。
内容的提问来源于stack exchange,提问作者Kuba K
相关产品推荐
相关产品推荐

