C#初始化泛型List<T>类及私有set属性问题求助
问题分析与解决
核心问题
- 类设计逻辑混乱:你让
SendResponse继承了List<SendResponse>,把"单个响应对象"和"响应对象集合"的职责混在一起,不符合面向对象的设计原则。 - 空引用异常直接诱因:
sendResponses被初始化为null,没有完成实例化就调用Add方法,必然触发空引用异常。
修正步骤
1. 重构SendResponse类
去掉不必要的继承,让它成为单纯的实体类:
[DataContract] public class SendResponse { public SendResponse(string messageId, string recipient) { MessageId = messageId; Recipient = recipient; } [DataMember] public string MessageId { get; private set; } [DataMember] public string Recipient { get; private set; } }
2. 正确创建列表并添加元素
实例化List<SendResponse>类型的对象后,再循环添加元素:
// 实例化空列表,而非赋值为null List<SendResponse> sendResponses = new List<SendResponse>(); foreach (var result in results) { sendResponses.Add(new SendResponse(result.MessageId, result.To)); }
特殊场景补充
如果是WCF序列化等特殊场景需要让集合类支持DataContract,可以单独定义集合类:
[DataContract] public class SendResponseList : List<SendResponse> { // 按需添加自定义构造方法或其他逻辑 }
使用时:
SendResponseList sendResponses = new SendResponseList(); foreach (var result in results) { sendResponses.Add(new SendResponse(result.MessageId, result.To)); }
内容的提问来源于stack exchange,提问作者Muthukani K
相关产品推荐
相关产品推荐

