public static void CopyToWithReadOnly(this ScriptObject from, ScriptObject to)
        {
            if (@from == null)
            {
                throw new ArgumentNullException(nameof(@from));
            }
            if (to == null)
            {
                throw new ArgumentNullException(nameof(to));
            }
            if (ReferenceEquals(from, to))
            {
                return;
            }

            foreach (var(key, value) in from)
            {
                var isReadOnly = !from.CanWrite(key);
                to.SetValue(key, value, isReadOnly);
            }
        }