Example #1
0
        public bool Equals(DbaseFieldValue left, DbaseFieldValue right)
        {
            if (left == null && right == null)
            {
                return(true);
            }
            if (left == null || right == null)
            {
                return(false);
            }
            var leftInspector  = new ValueInspector();
            var rightInspector = new ValueInspector();

            left.Inspect(leftInspector);
            right.Inspect(rightInspector);
            var sameField = left.Field.Equals(right.Field);

            if (left.Field.Length.Equals(new DbaseFieldLength(15)) &&
                left.Field.DecimalCount.Equals(new DbaseDecimalCount(0)) &&
                right.Field.Length.Equals(new DbaseFieldLength(15)) &&
                right.Field.DecimalCount.Equals(new DbaseDecimalCount(0)) &&
                (
                    (
                        left.Field.FieldType == DbaseFieldType.Character
                        ||
                        left.Field.FieldType == DbaseFieldType.DateTime
                    )
                    &&
                    (
                        right.Field.FieldType == DbaseFieldType.Character
                        ||
                        right.Field.FieldType == DbaseFieldType.DateTime
                    )
                ) &&
                (
                    leftInspector.Value == null
                    ||
                    (leftInspector.Value is string leftString && leftString == "")
                ) &&
                (
                    rightInspector.Value == null
                    ||
                    (rightInspector.Value is string rightString && rightString == "")
                )
                )
            {
                return(sameField);
            }

            IEqualityComparer <object> comparer = new ObjectEqualityComparer(left.Field.DecimalCount);
            var sameValue = comparer.Equals(leftInspector.Value, rightInspector.Value);

            return(sameField && sameValue);
        }
        public static TypeMetadataProviderBase GetMetadataProvider(object obj)
        {
            Type elementType;

            if (ValueInspector.IsPrimitiveObject(obj, out elementType))
            {
                return(new PrimitiveTypeMetadataProvider(obj, elementType)
                {
                    IsPrimitiveElement = true
                });
            }

            if (ValueInspector.IsPrimitiveEnumerable(obj, out elementType))
            {
                return(new EnumerablePrimitiveTypeMetadataProvider(obj)
                {
                    IsPrimitiveElement = true,
                    IsEnumerable = true
                });
            }

            if (ValueInspector.IsEnumerableOfKnownType(obj, out elementType))
            {
                return(new EnumerableComplexObjectTypeMetadataProvider(obj, elementType)
                {
                    IsEnumerable = true
                });
            }

            if (ValueInspector.IsObjectBasedEnumerable(obj))
            {
                return(new EnumerableObjectTypeMetadataProvider(obj)
                {
                    IsEnumerable = true
                });
            }

            return(new ComplexTypeMetadataProvider(obj));
        }