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

使用LINQ转换列表模型时遇类型转换错误,求解决方案

问题解决:LINQ转换模型时的类型错误与赋值问题

错误原因分析

你遇到的问题有两个核心点:

  1. AddRange方法返回值为void:不能将AddRange的调用结果直接赋值给ToRecipients,因为该方法仅修改已有列表,不返回任何对象。
  2. 重载匹配歧义:编译器尝试将IEnumerable<Recipient>匹配到AddRange的ReadOnlySpan<T>重载,触发类型转换错误。

正确的LINQ一行写法

直接使用LINQ的ToList()方法,将查询结果转换为List<Recipient>,同时处理email.To可能为null的情况:

ToRecipients = email.To?.Select(contact => new Recipient
{
    EmailAddress = new EmailAddress
    {
        Address = contact.EmailAddress,
        Name = contact.Name // 可选:如果Recipient的EmailAddress需要Name字段,可一并赋值
    }
}).ToList() ?? new List<Recipient>();

代码说明

  • email.To?.Select(...):用空条件运算符?.避免email.To为null时触发NullReferenceException。
  • .ToList():将LINQ生成的IEnumerable<Recipient>直接转为List<Recipient>,完全匹配ToRecipients的类型要求。
  • ?? new List<Recipient>():当email.To为null时返回空列表,确保ToRecipients始终不为null,和你的模型默认值习惯保持一致。

原写法问题拆解

  • new List<Recipient>().AddRange(...):创建新列表后调用AddRange,但AddRange不返回列表本身,因此赋值给ToRecipients的是void,本身就是语法错误。
  • 编译器重载匹配错误:IEnumerable<T>可隐式转换为部分Span类型,导致编译器误匹配AddRange(ReadOnlySpan<T>)重载,引发类型转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:12