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();
        }
Exemplo n.º 2
0
        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));
        }