ReconnectStats赋值后属性为空的技术问题求助
问题:ReconnectStatus赋值给Customer.ReconnectStats后字段全为空
将ReconnectStatus对象赋值给Customer的ReconnectStats属性后,该属性所有字段均为空。已尝试Linq匹配赋值、直接对象赋值、手动逐个属性赋值,甚至为方法参数添加ref修饰符测试。rs对象字段已填充,但值始终无法复制到customer.ReconnectStats中。加载_reconnectStatuses的代码仅首次调用时执行,遍历reader的代码已移除(无关)。
相关代码
AddReconnectStatus方法
private void AddReconnectStatus(ref Customer customer) { //we'll only load this collection once per customer reload if (_reconnectStatuses == null) { SqlConnection connection = null; SqlCommand cmd = null; IDataReader reader = null; //loading of _reconnectStatuses occurs here, but only during the first call to this method } //var match = _reconnectStatuses.FirstOrDefault(a => a.CustomerID == customer.CustomerNumber.Trim() && a.SONumber == customer.SONumber.Trim()); //customer.ReconnectStats = match; foreach (var rs in _reconnectStatuses) { if (rs.CustomerID == customer.CustomerNumber.Trim() && rs.SONumber == customer.SONumber.Trim()) { //customer.ReconnectStats = rs; customer.ReconnectStats = new ReconnectStatus() { SONumber = rs.SONumber.Trim(), CustomerID = rs.CustomerID.Trim(), SentToTechID = rs.SentToTechID.Trim(), ReconnectID = rs.ReconnectID, DateSent = rs.DateSent.Trim(), SentByUser = rs.SentByUser.Trim(), SentToTechEmail = rs.SentToTechEmail.Trim() }; break; } } }
ReconnectStatus类
internal class ReconnectStatus : ViewModelBase { internal int ReconnectID { get; set; } internal string CustomerID { get; set; } private String _SentByUser = string.Empty; public String SentByUser { get { return _SentByUser ?? string.Empty; } set { if (value != _SentByUser) { _SentByUser = value; NotifyPropertyChanged(); } } } private String _SentToTechID = string.Empty; public String SentToTechID { get { return _SentToTechID ?? string.Empty; } set { if (value != _SentToTechID) { _SentToTechID = value; NotifyPropertyChanged(); } } } private String _SentToTechEmail = string.Empty; public String SentToTechEmail { get { return _SentToTechEmail ?? string.Empty; } set { if (value != _SentToTechEmail) { _SentToTechEmail = value; NotifyPropertyChanged(); } } } private String _DateSent = string.Empty; public String DateSent { get { return _DateSent ?? string.Empty; } set { if (value != _DateSent) { _DateSent = value; NotifyPropertyChanged(); } } } private String _SONumber = string.Empty; public String SONumber { get { return _SONumber ?? string.Empty; } set { if (value != _SONumber) { _SONumber = value; NotifyPropertyChanged(); } } } }
Customer类的ReconnectStats属性
//property on Customer private ReconnectStatus _ReconnectStats = new ReconnectStatus(); public ReconnectStatus ReconnectStats { get { return _ReconnectStats = new ReconnectStatus(); } set { if (value != _ReconnectStats) { _ReconnectStats = value; NotifyPropertyChanged(); } } }
解决方案
问题出在Customer类的ReconnectStats属性的getter方法中:每次调用getter都会重新实例化一个新的ReconnectStatus对象并赋值给_ReconnectStats,这意味着即使你通过setter赋值了正确的对象,下次获取该属性时得到的是一个全新的空实例,所以看起来所有字段都是空的。
修改getter方法,直接返回已有的_ReconnectStats实例即可:
private ReconnectStatus _ReconnectStats = new ReconnectStatus(); public ReconnectStatus ReconnectStats { get { return _ReconnectStats; // 移除每次实例化的操作 } set { if (value != _ReconnectStats) { _ReconnectStats = value; NotifyPropertyChanged(); } } }
内容的提问来源于stack exchange,提问作者Steve S
相关产品推荐
相关产品推荐

