public void SetContents(Type type, object value) { this.arrayType = type; this.elementType = EditorRecordFieldUtility.GetDisplayType(type); var list = new ArrayList(); foreach (var item in (IEnumerable)value) { list.Add(item); } elements = list.Cast <object>().ToList(); }
public bool IsChanged(object record, string valueName) { var originData = changedRecords.GetValueOrDefault(record); if (originData == null) { return(false); } var valueType = GetValueType(valueName); var interfaces = valueType.GetInterfaces(); var originValue = GetValue(originData, valueName); var currentValue = GetValue(record, valueName); if (interfaces.Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable <>))) { var originArray = new ArrayList(); var currentArray = new ArrayList(); foreach (var item in (IEnumerable)originValue) { originArray.Add(item); } foreach (var item in (IEnumerable)currentValue) { currentArray.Add(item); } if (originArray.Count != currentArray.Count) { return(true); } for (var i = 0; i < originArray.Count; i++) { var v1 = originArray[i]; var v2 = currentArray[i]; if (!Equals(v1, v2)) { return(true); } } return(false); } if (valueType.IsGenericType) { if (valueType.GetGenericTypeDefinition() == typeof(Nullable <>)) { var displayType = EditorRecordFieldUtility.GetDisplayType(valueType); if (originValue == null) { originValue = displayType.GetDefaultValue(); } if (currentValue == null) { currentValue = displayType.GetDefaultValue(); } } } return(originValue == null ? currentValue != null : !originValue.Equals(currentValue)); }