Example #1
0
        static void ConstructFromSerializedType <TValue>(ref TValue value, Type type, ISerializedTypeProvider provider)
        {
#if !UNITY_DOTSPLAYER
            if (typeof(UnityEngine.Object).IsAssignableFrom(type))
            {
                return;
            }
#endif

            if (type.IsArray)
            {
                var count = provider.GetArrayLength();

                if (null == value || (value as Array)?.Length != count)
                {
                    var elementType = type.GetElementType();

                    if (elementType == null)
                    {
                        throw new ArgumentException("Failed to construct type. Missing array element type.");
                    }

                    value = (TValue)(object)Array.CreateInstance(elementType, count);
                }

                return;
            }

            if (null != value && value.GetType() == type)
            {
                return;
            }

            value = (TValue)Activator.CreateInstance(type);
        }