/// <inheritdoc/>
        public override int GetHashCode()
        {
            var hashCode = base.GetHashCode();

            hashCode = hashCode *
                       -1521134295 + IsValueType.GetHashCode();
            hashCode = hashCode *
                       -1521134295 + Value.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + Timestamp.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + StatusCode.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + DataType.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + ValueRank.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + ArrayDimensions.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + AccessLevelEx.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + AccessLevel.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + UserAccessLevel.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + MinimumSamplingInterval.GetHashSafe();
            hashCode = hashCode *
                       -1521134295 + Historizing.GetHashSafe();
            return(hashCode);
        }
 /// <inheritdoc/>
 public override bool Equals(object obj)
 {
     if (!(obj is VariableNodeModel model))
     {
         return(false);
     }
     if (IsValueType != model.IsValueType)
     {
         return(false);
     }
     if (!Utils.IsEqual(Value ?? Variant.Null, model.Value ?? Variant.Null))
     {
         return(false);
     }
     if (Timestamp != model.Timestamp)
     {
         return(false);
     }
     if (StatusCode != model.StatusCode)
     {
         return(false);
     }
     if (!Utils.IsEqual(DataType, model.DataType))   // TODO
     {
         return(false);
     }
     if (ValueRank != model.ValueRank)
     {
         return(false);
     }
     if (ArrayDimensions.SequenceEqualsSafe(model.ArrayDimensions))
     {
         return(false);
     }
     if (AccessLevelEx != model.AccessLevelEx)
     {
         return(false);
     }
     if (AccessLevel != model.AccessLevel)
     {
         return(false);
     }
     if (UserAccessLevel != model.UserAccessLevel)
     {
         return(false);
     }
     if (MinimumSamplingInterval.EqualsSafe(model.MinimumSamplingInterval))
     {
         return(false);
     }
     if (Historizing != model.Historizing)
     {
         return(false);
     }
     return(base.Equals(obj));
 }