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

如何将ArrayList对象属性导入DataTable?泛型List写法是否可行?

我来帮你梳理这两个问题的解决方案:

问题1:如何从ArrayList中引用对象的属性值?

因为ArrayList是非泛型集合,它存储的所有元素都是object类型,所以直接通过item.Company访问属性会编译失败——编译器不知道这个object具体是什么类型,自然无法识别它的属性。

解决方法是将item强制转换为你的实体类类型(比如你后面用到的CrmPartPrice),之后就能正常访问属性了。示例代码如下:

foreach (object item in crmUpdate)
{
    // 显式将object转换为CrmPartPrice类型
    CrmPartPrice crmItem = (CrmPartPrice)item;
    DataRow row = insertDt.NewRow();
    
    // 现在可以正常访问属性了
    row["Company"] = crmItem.Company;
    row["Contractid"] = crmItem.ContractId;
    row["ContractNumber"] = crmItem.ContractNumber;
    // 其他属性依次赋值...
    
    insertDt.Rows.Add(row);
}

⚠️ 注意:如果crmUpdate集合中存在不是CrmPartPrice类型的对象,这种强制转换会抛出InvalidCastException,所以如果集合元素类型不确定,建议先做类型检查:

foreach (object item in crmUpdate)
{
    if (item is CrmPartPrice crmItem)
    {
        DataRow row = insertDt.NewRow();
        row["Company"] = crmItem.Company;
        // 其他属性赋值...
        insertDt.Rows.Add(row);
    }
    // 可以添加else逻辑处理非目标类型的元素
}
问题2:泛型集合List<CrmPartPrice>的写法是否可行?

完全可行!而且这是更推荐的写法,相比ArrayList有很多优势:

  1. 类型安全:编译时就会检查集合元素的类型,避免运行时的类型转换异常;
  2. 无需强制转换:直接用CrmPartPrice类型遍历,代码更简洁;
  3. 性能更优:避免了ArrayList中object类型的装箱/拆箱操作;
  4. 可读性更高:从代码就能直接看出集合存储的是什么类型的对象。

你给出的代码框架是正确的,只需要补充完整所有属性的赋值即可,完整示例如下:

// 假设你已经正确定义了CrmPartPrice类,包含所有对应属性
List<CrmPartPrice> crmUpdate = new List<CrmPartPrice>();
// 注意:这里需要先填充crmUpdate的数据,比如从接口、数据库获取

foreach (CrmPartPrice item in crmUpdate)
{
    DataRow row = insertDt.NewRow();
    
    row["Company"] = item.Company;
    row["Contractid"] = item.ContractId;
    row["ContractNumber"] = item.ContractNumber;
    row["InstAgreeNum"] = item.InstAgreeNum;
    row["ProductNumber"] = item.ProductNumber;
    row["StartDate"] = item.StartDate;
    row["UpdatePrice"] = item.UpdatePrice;
    
    insertDt.Rows.Add(row);
}

总结一下:泛型集合List<T>是现代C#开发中替代ArrayList的首选方案,建议优先使用它来避免类型转换的麻烦和潜在的运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:58