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

C# 如何将存储Object数组的List转换为System.Int32[]

解决方案

1 先修正数据结构错误(核心问题)

Odoo的write方法针对多对多/一对多字段的操作指令是一维扁平的int序列,你当前的写法把(4, 关联ID)这个指令打包成了独立数组塞进List<object>,最终生成的是嵌套数组,不符合接口要求,需要先把指令展开:

// 直接声明为List<int>,避免后续类型转换
var _NewPaymentLine = new List<int>();
// 提取付款ID并转成int
int paymentId = Convert.ToInt32(Payment_Ids.GetField("id").Value);
// 依次添加指令编码和关联ID,不要打包成数组
_NewPaymentLine.Add(4); // Odoo关联已有记录的指令编码
_NewPaymentLine.Add(paymentId);

调用的时候直接ToArray()就是符合要求的int[]类型:

foreach (var result in results)
{
    result.SetFieldValue("payment_method_ids", _NewPaymentLine.ToArray());
    result.Save();
}

2 现有List转int[]的方法

如果你必须基于已有的List<object>做转换,可以用LINQ的方法展开嵌套结构再转类型:

// 先把嵌套的object数组展开为一维int序列,再转成数组
int[] targetArray = _NewPaymentLine
    .OfType<object[]>() // 筛选出所有嵌套的指令数组
    .SelectMany(arr => arr.Select(item => Convert.ToInt32(item))) // 展开所有元素并转成int
    .ToArray();

转换后直接传入SetFieldValue即可:

result.SetFieldValue("payment_method_ids", targetArray);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:48:00