ASP.NET项目中为tractObject赋值ArrayList时C#代码报错
问题分析与解决办法
核心问题
你定义的tractObject类中,p_lstStandObject属性声明为String类型,但getter返回ArrayList对象、setter接收ArrayList赋值,这是严重的类型不匹配错误。桌面版本可能因旧.NET框架的类型检查宽松没触发报错,但ASP.NET Web应用(尤其是基于较新版本.NET的)会严格校验类型一致性,直接抛出错误。
解决步骤
修正属性类型(最直接的方案)
把属性的声明类型从String改为ArrayList,确保属性类型与getter/setter的返回、输入类型完全一致:public class tractObject { private ArrayList _lstStandObject; public ArrayList p_lstStandObject { get { return _lstStandObject; } set { _lstStandObject = value; } } // 其他类成员... }若需字符串存储,单独处理序列化逻辑
如果业务上需要将集合转为字符串存储(比如持久化),不要直接混用类型,应该拆分出专门的序列化逻辑: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); } } // 其他类成员... }推荐使用泛型集合替代ArrayList
在ASP.NET项目中,建议用List<standObject>替代非泛型的ArrayList,类型更安全,还能避免装箱拆箱的性能损耗:public class tractObject { public List<standObject> p_lstStandObject { get; set; } // 其他类成员... }
内容的提问来源于stack exchange,提问作者Todd Krueger
相关产品推荐
相关产品推荐

