private bool Equals(CompositeKeyValue other)
        {
            if (Key != other.Key)
            {
                return(false);
            }

            var parts      = _keyValueParts;
            var otherParts = other._keyValueParts;

            var partCount = parts.Length;

            if (partCount != otherParts.Length)
            {
                return(false);
            }

            for (var i = 0; i < partCount; i++)
            {
                if (!StructuralComparisons.StructuralEqualityComparer.Equals(parts[i], otherParts[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
        private bool Equals(CompositeKeyValue other)
        {
            if (Key != other.Key)
            {
                return false;
            }

            var parts = _keyValueParts;
            var otherParts = other._keyValueParts;

            var partCount = parts.Length;
            if (partCount != otherParts.Length)
            {
                return false;
            }

            for (var i = 0; i < partCount; i++)
            {
                if (!StructuralComparisons.StructuralEqualityComparer.Equals(parts[i], otherParts[i]))
                {
                    return false;
                }
            }

            return true;
        }
        public void Base_class_value_property_returns_same_as_strongly_typed_value_property()
        {
            var key = new CompositeKeyValue(new Mock<IKey>().Object, new object[] { 77, "Kake" });

            Assert.Equal(new object[] { 77, "Kake" }, key.Value);
            Assert.Equal(new object[] { 77, "Kake" }, (object[])((IKeyValue)key).Value);
        }