【发布时间】:2018-09-02 09:14:20
【问题描述】:
我不确定从哪里开始,所以这个问题可能会随着我收到反馈而演变。也就是说,我正在将我们的项目升级到 .net 4.6.2。在更新了 nuget 包并解决了依赖问题之后,我终于可以构建了。但是,在启动期间,我现在遇到了一个我无法解决的异常。由于 null 值,异常稍后发生,但我已将问题跟踪到参数如何进入方法的更改。
这是参数不同的方法。参数expression 根据.net 版本的不同而不同。
public static IInterfaceNameChanged CreateScreenRule<TInstance>(Expression<Func<TInstance, ScreenRule>> expression)
where TInstance : new()
{
return CreateNewable(expression, null, RuleSetBase.RuleSetTypes.Req);
}
这是对 CreateScreenRule() 的调用:
RuleFactory.CreateScreenRule<VehicleDriverAssignment>(i => i.VehicleDriverAssignments)
以及我们正在尝试创建的方法的签名:
public void VehicleDriverAssignments(ScreenRuleContext args)
{...}
升级前: 表达式参数像这样进入方法:
i => Convert(CreateDelegate(RuleEngine.ScreenRule, i, Void VehicleDriverAssignments(RuleEngine.ScreenRuleContext)))
升级后: 它进入这样的方法:
i => 转换(无效 VehicleDriverAssignments(RuleEngine.ScreenRuleContext).CreateDelegate(RuleEngine.ScreenRule, i))
所有代码都没有改变,唯一改变的是升级和其他与升级相关的活动(nuget 升级、绑定重定向等)。
任何想法为什么升级 .net 会从根本上改变expression 的使用方式?
谢谢
【问题讨论】:
-
委托是:public delegate void ScreenRule(ScreenRuleContext context);
标签: c# .net delegates lazy-initialization .net-4.6.2