private void CloneGenericCollection(IMemberAccessor accessor, object originalValue, object target) { // support readonly collections object targetValue = accessor.HasSetter ? CreateTargetValue(accessor, originalValue, target) : accessor.GetValue(target); if (targetValue == null) { return; } var sourceList = originalValue as IEnumerable; if (sourceList == null) { return; } // dynamic wrapper to call generic Add method dynamic targetList = new DynamicProxy(targetValue); foreach (var sourceItem in sourceList) { var cloneItem = CloneInstance(sourceItem); targetList.Add(cloneItem); } if (!accessor.HasSetter) { return; } accessor.SetValue(target, targetValue); }
private void CloneGenericDictionary(IMemberAccessor accessor, object originalValue, object target) { // support readonly dictionary object targetValue = accessor.HasSetter ? CreateTargetValue(accessor, originalValue, target) : accessor.GetValue(target); if (targetValue == null) { return; } // must support IEnumerable var sourceList = originalValue as IEnumerable; if (sourceList == null) { return; } // dynamic wrapper to call generic Add method dynamic targetDictionary = new DynamicProxy(targetValue); var e = sourceList.GetEnumerator(); while (e.MoveNext()) { // dynamic wrapper to get the key and value dynamic proxy = new DynamicProxy(e.Current); var keyProxy = proxy.Key as IDynamicProxy; var valueProxy = proxy.Value as IDynamicProxy; if (keyProxy == null) { continue; } object key = keyProxy.Wrapped; object value = valueProxy != null ? valueProxy.Wrapped : null; object cloneItem = CloneInstance(value); targetDictionary.Add(key, cloneItem); } if (!accessor.HasSetter) { return; } accessor.SetValue(target, targetValue); }
private void CloneGenericDictionary(IMemberAccessor accessor, object originalValue, object target) { // support readonly dictionary object targetValue = accessor.HasSetter ? CreateTargetValue(accessor, originalValue, target) : accessor.GetValue(target); if (targetValue == null) return; // must support IEnumerable var sourceList = originalValue as IEnumerable; if (sourceList == null) return; // dynamic wrapper to call generic Add method dynamic targetDictionary = new DynamicProxy(targetValue); var e = sourceList.GetEnumerator(); while (e.MoveNext()) { // dynamic wrapper to get the key and value dynamic proxy = new DynamicProxy(e.Current); var keyProxy = proxy.Key as IDynamicProxy; var valueProxy = proxy.Value as IDynamicProxy; if (keyProxy == null) continue; object key = keyProxy.Wrapped; object value = valueProxy != null ? valueProxy.Wrapped : null; object cloneItem = CloneInstance(value); targetDictionary.Add(key, cloneItem); } if (!accessor.HasSetter) return; accessor.SetValue(target, targetValue); }
private void CloneGenericCollection(IMemberAccessor accessor, object originalValue, object target) { // support readonly collections object targetValue = accessor.HasSetter ? CreateTargetValue(accessor, originalValue, target) : accessor.GetValue(target); if (targetValue == null) return; var sourceList = originalValue as IEnumerable; if (sourceList == null) return; // dynamic wrapper to call generic Add method dynamic targetList = new DynamicProxy(targetValue); foreach (var sourceItem in sourceList) { var cloneItem = CloneInstance(sourceItem); targetList.Add(cloneItem); } if (!accessor.HasSetter) return; accessor.SetValue(target, targetValue); }