将C#的Automapper DataReader映射代码转VB.Net遇重载解析失败求助
Automapper DataTable转DTO的C#转VB.Net问题解决
问题描述
本人VB.Net经验不足,在转换一段使用Automapper和Automapper.Data NuGet包的C#代码(用于实现DataTable到DTO的映射)时遇到困难。自行编写的VB.Net代码出现“Overload resolution failure”重载解析失败警告,寻求正确的代码转换方案。
原C#代码
IMapper DataReaderMapper = new MapperConfiguration(cfg => { cfg.AddDataReaderMapping(); cfg.CreateMap<IDataReader, MyDTO1>(); cfg.CreateMap<IDataReader, MyDTO2>(); cfg.CreateMap<IDataReader, MyDTO3>(); }).CreateMapper();
尝试的VB.Net代码
Dim DataReaderMapper As IMapper = New MapperConfiguration(Function(cfg) {cfg.AddDataReaderMapping(), cfg.CreateMap(Of IDataReader, MyDTO1)()}).CreateMapper()
正确的VB.Net代码
Dim DataReaderMapper As IMapper = New MapperConfiguration(Sub(cfg) cfg.AddDataReaderMapping() cfg.CreateMap(Of IDataReader, MyDTO1)() cfg.CreateMap(Of IDataReader, MyDTO2)() cfg.CreateMap(Of IDataReader, MyDTO3)() End Sub).CreateMapper()
错误原因说明
- 委托类型错误:原C#代码里的
cfg => {...}是无返回值的Action委托,对应VB.Net里应该用Sub而非Function(Function用于有返回值的委托)。 - 多语句写法错误:VB.Net中Lambda多语句不能用
{...}数组初始化语法,需要将语句放在Sub和End Sub包裹的代码块中,每行一个操作即可。
内容的提问来源于stack exchange,提问作者tgc
相关产品推荐
相关产品推荐

