public bool Equals(
            ActionList x,
            ActionList y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }

            if (x == null ||
                y == null)
            {
                return(false);
            }

            if (x.Id != y.Id)
            {
                return(false);
            }

            var actionComparer = new ActionInfoComparer();

            foreach (var action in x)
            {
                if (!y.Any(item =>
                           actionComparer.Equals(
                               item,
                               action)))
                {
                    return(false);
                }
            }

            return(true);
        }
        public bool Equals(
            ActionInfo x,
            ActionInfo y)
        {
            if (ReferenceEquals(x, y))
            {
                return(true);
            }

            if (x == null ||
                y == null)
            {
                return(false);
            }

            var concernComparer   = new ConcernInfoComparer();
            var actionComparer    = new ActionInfoComparer();
            var telemetryComparer = new TelemetryInfoComparer();

            if (x.Id != y.Id ||
                x.Type != y.Type ||
                x.Target != y.Target ||
                x.Api != y.Api ||
                !ReferenceEquals(
                    x.Parent,
                    y.Parent) ||
                !concernComparer.Equals(
                    x.TargetConcern,
                    y.TargetConcern) ||
                !actionComparer.Equals(
                    x.TargetAction,
                    y.TargetAction) ||
                !telemetryComparer.Equals(
                    x.Telemetry,
                    y.Telemetry))
            {
                return(false);
            }

            return(true);
        }