You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中将List<Account>赋值给Payment_Details数组时转换错误如何解决

错误原因

Cast<T>() 方法仅支持以下几种转换场景:

  • 引用类型的向上/向下转型(即两个类型存在继承关系)
  • 装箱、拆箱转换
  • 类型中预先定义了隐式/显式转换运算符

你项目内自定义的Account类和Web服务生成的Payment_Details类是完全独立的两个类型,既无继承关系也没有预定义转换规则,所以直接调用Cast<Payment_Details>()会抛出强制转换失败的异常。

解决方案

方案1:手动属性映射(推荐,适合字段少的场景)

直接用LINQ的Select方法遍历每个Account实例,手动为Payment_Details的属性赋值,代码示例:

vendReg.RequestDetails = registration.Accounts.Select(acc => new Payment_Details
{
    Bk_Code = acc.Code,
    Bk_Name = acc.Name,
    Bk_Address = acc.Address
}).ToArray();

这种方式无需引入第三方依赖,执行效率最高,也方便处理字段映射的特殊逻辑。

方案2:使用对象映射库(适合字段多、映射场景多的项目)

如果项目中存在大量类似的类转换场景,可以引入AutoMapper等映射库,预先配置映射规则后自动完成转换:

  1. 先安装AutoMapper NuGet包
  2. 配置映射规则:
var config = new MapperConfiguration(cfg => 
    cfg.CreateMap<Account, Payment_Details>()
       .ForMember(dest => dest.Bk_Code, opt => opt.MapFrom(src => src.Code))
       .ForMember(dest => dest.Bk_Name, opt => opt.MapFrom(src => src.Name))
       .ForMember(dest => dest.Bk_Address, opt => opt.MapFrom(src => src.Address))
);
var mapper = config.CreateMapper();
  1. 执行转换:
vendReg.RequestDetails = mapper.Map<Payment_Details[]>(registration.Accounts);

内容的提问来源于stack exchange,提问作者hopeforall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:42:00