An expression tree may not contain a reference to a local function(表达式树不能包含对局部函数的引用)
问题描述
错误:表达式树不能包含对本地函数的引用
public void Initialize()
{
CloudStorageProperties ImageFileProperties(string fileName) => _cloudStorage.GetBlob(CloudStorageType.Image, fileName).FileProperties;
Config = new MapperConfiguration(x =>
{
x.CreateMap<Category, CategoryViewModel>()
.ForMember(vm => vm.ImagePath, m => m.MapFrom(src => ImageFileProperties(src.ImageFile.Name).Uri.AbsoluteUri));
});
}
我可以用匿名函数替换本地函数,它可以工作,但Re Sharper说我应该将其转换为本地函数。
为什么不允许这样做?
推荐答案
下面是Roslyn中进行此更改的pull request:
现在不允许在表达式树中引用局部函数, 这在未来可能会改变,也可能不会改变(以前是 作为对损坏的方法名称的引用生成,看起来 错误)。为此添加了新错误。
因此其背后的推理是:当您引用表达式树中的方法时,它被表示为具有给定方法名称的MethodCall
表达式。如果引用名称为ImageFileProperties
的局部函数,则应该使用相同名称的MethodCall
。表达式树的目的是被分析和解构,所以名字在那里很重要。但在现实中,局部函数被编译为名称类似于<Initialize>g__ImageFileProperties1_0
的静态函数(在上面的引号中称为"损坏的方法名")。出于这个原因,Roslyn开发人员决定不允许这样做,以避免混淆(源代码中看到的函数的名称和表达式树中的函数的名称)。使用匿名函数时不会出现这种混淆,因此允许使用匿名函数。
这篇关于表达式树不能包含对局部函数的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:表达式树不能包含对局部函数的引用
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- SSE 浮点算术是否可重现? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- rabbitmq 的 REST API 2022-01-01