Example #1
0
        public void SetValue(object instance)
        {
            if (instance == null)
            {
                return;
            }

            var array = (IList)field.GetValue(instance);

            if (array == null)
            {
                if (type.IsArray)
                {
                    array = Array.CreateInstance(elementType, setters.Count);
                }
                else
                {
                    array = (IList)Activator.CreateInstance(type);
                }

                field.SetValue(instance, array);
            }

            if (array.Count != setters.Count)
            {
                if (type.IsArray)
                {
                    array = Array.CreateInstance(elementType, setters.Count);
                    field.SetValue(instance, array);
                }
                else if (!array.IsFixedSize)
                {
                    PoolUtility.Resize(array, elementType, setters.Count);
                }
                else
                {
                    return;
                }
            }

            for (int i = 0; i < setters.Count; i++)
            {
                setters[i].SetValue(array, i);
            }
        }