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)); }