C# - 将列表 System.Object[] 转换为列表 System.Int32[]

Posted

技术标签:

【中文标题】C# - 将列表 System.Object[] 转换为列表 System.Int32[]【英文标题】:C# - Convert a List System.Object[] to List System.Int32[] 【发布时间】:2021-09-28 15:14:18 【问题描述】:

我是 C# 新手

我正在尝试使用已创建的函数here

实际上我不知道如何将列表作为数组作为参数返回。 这里的这个函数将使用 Odoo API 的“write”方法。

    public void SetFieldValue(string field, object value)
    
        var fieldAttribute = _fieldsResult.FirstOrDefault(f => f.FieldName == field);
        if (fieldAttribute == null) return;

        fieldAttribute.Changed = fieldAttribute.Changed == false;

        fieldAttribute.Value = value;
    

所以我确实喜欢这个,但它不起作用:

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

_NewPaymentLine 是我填写的列表:

var _NewPaymentLine = new List<object>();
_NewPaymentLine.Add(new object[]  4, Payment_Ids.GetField("id").Value );

我只能说input valueSystem.Object[] 类型,output valueSystem.Int32[] 类型。

实际上,我用 SetFieldValue 返回的是一个 System.Object[],但我认为我必须返回一个 System.Int32[],所以问题是,我该如何制作我的 System.Object 列表[] 进入 System.Int32[]

先谢谢了,希望有人能帮助我。

【问题讨论】:

问题是什么?我真的不明白。如何从 C# 中的方法返回数组? 实际上,我用 SetFieldValue 返回的是一个 System.Object[],但我认为我必须返回一个 System.Int32[],所以问题是,我该怎么做才能让我的System.Object[] 列表进入 System.Int32[] 您必须创建一个新数组。您不能“投射”现有数组。执行int[] resultArray = Array.ConvertAll(inputArray, x =&gt; (int)x); 之类的操作,其中inputArray 是您的对象数组-或者如果您需要转换string(或您的对象可能是其他任何东西),请使用Convert.ToInt32(x) 之类的东西而不是(int)x 所以,我尝试这样做,但我无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List[]' 因为我的 inputArray是一个列表 您的错误表明您有一个List&lt;object&gt;,但是需要一个List&lt;object&gt; (List&lt;ojbect&gt;[]) 的数组。这听起来很奇怪......也许是你的错误? 【参考方案1】:

不确定这是否是你假装的,但你必须创建一个函数来从你的 Object 转换为 Int

public List<int> DoConvert(List<Object> objectsList)
    List<int> intList = new List<int>();
    foreach(var object in objectsList)
    
        intList.Add(object.MyNumber)       //Input your logic here
    
    return intList;

【讨论】:

object 肯定没有.MyNumber。这对初学者来说可能有点误导。我建议对object 进行某种“样本转换”。你还缺少一个函数名。 @Dominik, RpcField 没有出现在他提供的链接上定义,我认为它会有其他属性,他只想保存其中一些,因此我的“在此处输入您的逻辑”。此外,虽然使用 List 创建更抽象的函数,但 return 无法实现他所假装的,因为我认为他需要访问特定的属性。 您好,谢谢您的回答,这是一个类似的问题

以上是关于C# - 将列表 System.Object[] 转换为列表 System.Int32[]的主要内容,如果未能解决你的问题,请参考以下文章

C#枚举类型的常用操作总结

未定义或导入 C# 预定义类型“System.Object”

从“System.Object [,]”c#中获取值

在 Directory<system.String, system.Object> 中按键访问值 - C# Unity Dictionary

C#进阶系列04 类型基础

C#中的object类深入理解!最好给实例!及其转换!