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

ASP.NET项目中为tractObject赋值ArrayList时C#代码报错

问题分析与解决办法

核心问题

你定义的tractObject类中,p_lstStandObject属性声明为String类型,但getter返回ArrayList对象、setter接收ArrayList赋值,这是严重的类型不匹配错误。桌面版本可能因旧.NET框架的类型检查宽松没触发报错,但ASP.NET Web应用(尤其是基于较新版本.NET的)会严格校验类型一致性,直接抛出错误。

解决步骤

  1. 修正属性类型(最直接的方案)
    把属性的声明类型从String改为ArrayList,确保属性类型与getter/setter的返回、输入类型完全一致:

    public class tractObject
    {
        private ArrayList _lstStandObject;
    
        public ArrayList p_lstStandObject
        {
            get { return _lstStandObject; }
            set { _lstStandObject = value; }
        }
    
        // 其他类成员...
    }
    
  2. 若需字符串存储,单独处理序列化逻辑
    如果业务上需要将集合转为字符串存储(比如持久化),不要直接混用类型,应该拆分出专门的序列化逻辑:

    public class tractObject
    {
        private ArrayList _lstStandObject;
        private string _lstStandObjectSerialized;
    
        // 对外暴露的集合属性
        public ArrayList p_lstStandObject
        {
            get { return _lstStandObject; }
            set 
            { 
                _lstStandObject = value;
                // 赋值时同步序列化字符串
                _lstStandObjectSerialized = JsonConvert.SerializeObject(value);
            }
        }
    
        // 专门的字符串属性(按需使用)
        public string lstStandObjectSerialized
        {
            get { return _lstStandObjectSerialized; }
            set 
            { 
                _lstStandObjectSerialized = value;
                // 反序列化回集合
                _lstStandObject = JsonConvert.DeserializeObject<ArrayList>(value);
            }
        }
    
        // 其他类成员...
    }
    
  3. 推荐使用泛型集合替代ArrayList
    在ASP.NET项目中,建议用List<standObject>替代非泛型的ArrayList,类型更安全,还能避免装箱拆箱的性能损耗:

    public class tractObject
    {
        public List<standObject> p_lstStandObject { get; set; }
    
        // 其他类成员...
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:48:29