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