private IList <ReflectedField> GetAffectedFields(Type typeToReflect) { IList <ReflectedField> affectedFields; if (!_reflectedTypes.TryGetValue(typeToReflect, out affectedFields)) { affectedFields = new List <ReflectedField>(); FieldInfo[] fieldInfos = typeToReflect.Fields().Where(fi => !IsPrimitive(fi.FieldType)).ToArray(); for (int i = 0; i < fieldInfos.Length; i++) { FieldInfo fieldInfo = fieldInfos[i]; DeepCloneBehavior dcb = GetDeepCloneBehaviour(fieldInfo); if (dcb != DeepCloneBehavior.Shallow) { affectedFields.Add(new ReflectedField { FieldInfo = fieldInfo, MemberGetter = fieldInfo.DelegateForGetFieldValue(), MemberSetter = fieldInfo.DelegateForSetFieldValue(), Behaviour = dcb }); } } _reflectedTypes.Add(typeToReflect, affectedFields); } return(affectedFields); }
public DeepCloneAttribute(DeepCloneBehavior behavior) { Behavior = behavior; }