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