public override bool Equals(Object o){if (!(o is Property))return false;Property p = (Property)o;Object pValue = p.Value;long pId = p.ID;if (id != pId || (id != 0 && !TypesAreEqual(type, p.Type)))return false;if (value == null && pValue == null)return true;if (value == null || pValue == null)return false;Type valueClass = value.GetType();Type pValueClass = pValue.GetType();if (!(valueClass.IsAssignableFrom(pValueClass)) &&!(pValueClass.IsAssignableFrom(valueClass)))return false;if (value is byte[])return Arrays.Equals((byte[])value, (byte[])pValue);return value.Equals(pValue);}