public bool DeepEquals(DestinyItemComponent?other)
 {
     return(other is not null &&
            ItemHash == other.ItemHash &&
            ItemInstanceId == other.ItemInstanceId &&
            Quantity == other.Quantity &&
            BindStatus == other.BindStatus &&
            Location == other.Location &&
            BucketHash == other.BucketHash &&
            TransferStatus == other.TransferStatus &&
            Lockable == other.Lockable &&
            State == other.State &&
            OverrideStyleItemHash == other.OverrideStyleItemHash &&
            ExpirationDate == other.ExpirationDate &&
            IsWrapper == other.IsWrapper &&
            TooltipNotificationIndexes.DeepEqualsListNaive(other.TooltipNotificationIndexes) &&
            MetricHash == other.MetricHash &&
            (MetricObjective is not null ? MetricObjective.DeepEquals(other.MetricObjective) : other.MetricObjective is null) &&
            VersionNumber == other.VersionNumber &&
            ItemValueVisibility.DeepEqualsListNaive(other.ItemValueVisibility));
 }
 public void Update(DestinyItemComponent?other)
 {
     if (other is null)
     {
         return;
     }
     if (ItemHash != other.ItemHash)
     {
         ItemHash = other.ItemHash;
         OnPropertyChanged(nameof(ItemHash));
     }
     if (ItemInstanceId != other.ItemInstanceId)
     {
         ItemInstanceId = other.ItemInstanceId;
         OnPropertyChanged(nameof(ItemInstanceId));
     }
     if (Quantity != other.Quantity)
     {
         Quantity = other.Quantity;
         OnPropertyChanged(nameof(Quantity));
     }
     if (BindStatus != other.BindStatus)
     {
         BindStatus = other.BindStatus;
         OnPropertyChanged(nameof(BindStatus));
     }
     if (Location != other.Location)
     {
         Location = other.Location;
         OnPropertyChanged(nameof(Location));
     }
     if (BucketHash != other.BucketHash)
     {
         BucketHash = other.BucketHash;
         OnPropertyChanged(nameof(BucketHash));
     }
     if (TransferStatus != other.TransferStatus)
     {
         TransferStatus = other.TransferStatus;
         OnPropertyChanged(nameof(TransferStatus));
     }
     if (Lockable != other.Lockable)
     {
         Lockable = other.Lockable;
         OnPropertyChanged(nameof(Lockable));
     }
     if (State != other.State)
     {
         State = other.State;
         OnPropertyChanged(nameof(State));
     }
     if (OverrideStyleItemHash != other.OverrideStyleItemHash)
     {
         OverrideStyleItemHash = other.OverrideStyleItemHash;
         OnPropertyChanged(nameof(OverrideStyleItemHash));
     }
     if (ExpirationDate != other.ExpirationDate)
     {
         ExpirationDate = other.ExpirationDate;
         OnPropertyChanged(nameof(ExpirationDate));
     }
     if (IsWrapper != other.IsWrapper)
     {
         IsWrapper = other.IsWrapper;
         OnPropertyChanged(nameof(IsWrapper));
     }
     if (!TooltipNotificationIndexes.DeepEqualsListNaive(other.TooltipNotificationIndexes))
     {
         TooltipNotificationIndexes = other.TooltipNotificationIndexes;
         OnPropertyChanged(nameof(TooltipNotificationIndexes));
     }
     if (MetricHash != other.MetricHash)
     {
         MetricHash = other.MetricHash;
         OnPropertyChanged(nameof(MetricHash));
     }
     if (!MetricObjective.DeepEquals(other.MetricObjective))
     {
         MetricObjective.Update(other.MetricObjective);
         OnPropertyChanged(nameof(MetricObjective));
     }
     if (VersionNumber != other.VersionNumber)
     {
         VersionNumber = other.VersionNumber;
         OnPropertyChanged(nameof(VersionNumber));
     }
     if (!ItemValueVisibility.DeepEqualsListNaive(other.ItemValueVisibility))
     {
         ItemValueVisibility = other.ItemValueVisibility;
         OnPropertyChanged(nameof(ItemValueVisibility));
     }
 }