C#通过val复制通用对象

时间:2015-04-09 02:42:52

标签: c# value-type

我正在创建一个处理变更跟踪(和其他东西)的通用控制子类,主要用于将数据绑定到底层对象(最终是数据库,但我不应该依赖于此) 。

我需要在编辑开始时跟踪值,在任何给定点跟踪当前值,并在任何给定点保持这些值的清晰分离。因为我不知道类型,所以适用的属性被声明为对象:

    class DataboundControl : Control
    {

        private string _valuePropertyName;
        private string _changedEventName;

        public Control BaseControl { get; private set; }
        public object Value { get { return Objects.GetPropertyValue(this.BaseControl, _valuePropertyName); } }
        public bool IsDirty { get { return object.Equals(this.Value, this.ControlEditStartValue); } }

        // change tracking
        public object ControlEditStartValue { get; set; }
        public object RecordEditStartValue { get; set; }



        public DataboundControl(Control control, string valuePropertyName, string changedEventName) {

            this.BaseControl = control;

            this._valuePropertyName = valuePropertyName;
            this._changedEventName = changedEventName;

            registerChangedEvent();
        }
}

在上面的例子中,我需要存储"非reffed" ControlEditStartValue和RecordEditStartValue的副本。

鉴于控件值几乎总是标准值-ish类型(string,int,bool - 映射到数据库字段的东西),我更喜欢默认处理它并处理明确的例外情况。

我觉得这应该很容易,但是随之而来的是一堆乱七八糟的浅/深拷贝。鉴于价值几乎总是非常“浅”。就一个物体而言,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

使用Json.Net序列化/反序列化值