我有十几个继承自同一个基类的类。对于每个类,我希望在属性更新时更改状态,因此我有一个名为UpdateProperty(oldValue,newValue)的函数。我正在寻找一种方法来使这些泛型,这样当我添加一个新的类时,我不需要添加一个新的函数。这就是我所拥有的:
    public TicketType UpdateProperty(TicketType oldValue, TicketType newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }
    public Layout UpdateProperty(Layout oldValue, Layout newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }
    public Division UpdateProperty(Division oldValue, Division newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }
    public MasterDataList UpdateProperty(MasterDataList oldValue, MasterDataList newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }
    public MasterDataListItem UpdateProperty(MasterDataListItem oldValue, MasterDataListItem newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }
    public Ticket UpdateProperty(Ticket oldValue, Ticket newValue)
    {
        if (oldValue != newValue && ObjectState != ObjectState.New && ObjectState != ObjectState.Deleted)
        {
            ObjectState = ObjectState.Changed;
        }
        return newValue;
    }如您所见,它们都做同样的事情。有人能给我指个方向吗?
发布于 2017-12-13 18:13:53
我不仅要设置ObjectState,还要设置方法内部的属性值。
将该方法放在基类中。
public abstract class BaseClass
{
    public ObjectState ObjectState { get; private set; }
    protected bool Set<T>( ref T field, T value )
    {
        if Equals( field, value ) return false;
        field = value;
        if ( ObjectState == ObjectState.Unchanged )
          ObjectState = ObjectState.Changed;
        return true;
    }
}在继承的类中
public class Foo : BaseClass
{
    private TicketType _ticketType;
    public TicketType TicketType 
    {
        get => _ticketType; 
        set => Set( ref _ticketType, value );
    }
}发布于 2017-12-13 18:04:22
是的,但是你必须创建一个泛型方法。如果需要,您可以将其放在基类中:
public T UpdateProperty<T>(T oldValue, T newValue)
{
    if (!object.Equals(oldValue, newValue) && this.ObjectState != ObjectState.New && this.ObjectState != ObjectState.Deleted)
    {
        this.ObjectState = ObjectState.Changed;
    }
    return newValue;
}https://stackoverflow.com/questions/47790200
复制相似问题