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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:05:03