C#中List<ProcessedZip>转string[][]报错:无法隐式转换类型
解决方法:将ProcessedZip列表转换为string[][]交错数组
你的核心问题是没有把ProcessedZip对象的属性值提取出来转换成string数组,而是直接把对象本身当作数组元素,导致类型不匹配(ProcessedZip[]/ProcessedZip[][] vs string[][])。
最可靠的手动转换方式(推荐)
因为你的ProcessedZip类属性是固定的,直接手动列出所有string属性,把每个对象映射成一个string数组,再整体转成外层数组:
return processedZips.Select(zip => new string[] { zip.ErrorFound, zip.IsEnabled, // 依次添加剩余6个属性,比如 zip.PropertyName1, zip.PropertyName2... }).ToArray();
这段代码的逻辑:
- 用
Select遍历每个ProcessedZip对象 - 把每个对象的所有string属性值打包成一个
string[] - 最后
ToArray()将所有string[]组合成string[][],正好匹配你的返回类型
自动反射转换方式(适合属性较多的场景)
如果不想手动维护属性列表,可以用反射自动提取所有string类型的属性(注意:要确保属性顺序符合你的需求,且所有目标属性都是string类型):
using System.Reflection; // ... return processedZips.Select(zip => typeof(ProcessedZip) .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(prop => prop.PropertyType == typeof(string)) .OrderBy(prop => prop.Name) // 按属性名排序,保证每次顺序一致 .Select(prop => prop.GetValue(zip) as string) .ToArray() ).ToArray();
你之前尝试的错误原因
processedZips.ToArray():直接把列表转成ProcessedZip[],完全没处理属性,类型不匹配processZips.Select(i=> new ProcessedZip()).ToArray():生成的还是ProcessedZip[],甚至是新的空对象,根本没转换属性processedZips.Select(i = new[] {i}).ToArray():得到的是ProcessedZip[][],每个元素是包含单个ProcessedZip对象的数组,依然不是string类型的数组
内容的提问来源于stack exchange,提问作者Rich Petersen
相关产品推荐
相关产品推荐

