重构C#自动属性到字段和getter/setter属性?

Ste*_*e B 5 c# refactoring

我有一堆业务类与autoproperties:

public class A {

    public int Id { get; set; }
    public string Title { get; set;}

}
Run Code Online (Sandbox Code Playgroud)

由于应用程序不断发展,因此需要启用跟踪属性更改的新要求,以便仅向后备存储库发送已更改的数据.

为了达到这个目标,我必须将所有属性转换为字段+属性,如下所示:

public class A {

    private int m_Id;
    public int Id {
        get { return m_Id; }
        set {
            if(m_Id != value){
                SetChanged("Id");
                m_Id = value;
            }
        }
    }
    private string m_Title;
    public string Title 
    { 
        get { return m_Title; }
        set {
            if(m_Title != value){
                SetChanged("Title");
                m_Title = value;
            }
        }
    }

    protecte void SetChanged(string propertyName) { 
        // Not important here
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法快速重构我的代码,以避免手动更改属性?

Nic*_*ock 1

您始终可以创建一个通用方法来执行分配并调用SetChange

void SetChangeIfNeeded<T>(ref T field, T value, string propertyName)
{
    if (!EqualityComparer<T>.Default.Equals(field, value))
    {
        field = value;
        SetChanged(property);
    }
}
Run Code Online (Sandbox Code Playgroud)

你仍然需要有一个私人后场。你的课程看起来像这样:

public class A {  

    private int m_id
    public int Id 
    { 
        get { return m_id };
        set { SetChangeIfNeeded<int>(ref m_id, value, "Id"); }
    }  
}  
Run Code Online (Sandbox Code Playgroud)