将GetHashCode中的Non-Readonly属性与DataMember属性一起使用

时间:2018-08-20 08:51:22

标签: c# wcf equality

我使用 DataContract 处理WCF服务中的类。因此,我需要属性 ApiCallStatus (类型:ApiCallStatus作为枚举)同时具有自动获取器和-setter器。但是要覆盖 GetHashCode ,我需要一个“只读”属性来正确实现它。有没有一种方法可以以两种要求都能正常工作并且以干净的方式实现呢?

[DataContract]
public class ApiCallStatusInformation {
    [DataMember]
    public ApiCallStatus ApiCallStatus { get; set; }

    public bool Equals(ApiCallStatusInformation other) {
        if (ReferenceEquals(null, other))
            return false;
        if (ReferenceEquals(this, other))
            return true;

        return this.ApiCallStatus == other.ApiCallStatus;
    }

    public override bool Equals(object obj) {
        if (ReferenceEquals(null, obj))
            return false;
        if (ReferenceEquals(this, obj))
            return true;
        return obj.GetType() == this.GetType() && this.Equals((ApiCallStatusInformation) obj);
    }

    public override int GetHashCode() {
        return (int) this.ApiCallStatus;
    }
}

1 个答案:

答案 0 :(得分:0)

一个[DataMember]可能是private readonly,这避免了这个问题。

之所以可能是private readonly是因为[DataContract]实现使用反射来设置[DataMember]字段,这意味着privatereadonly方面被忽略。