Esempio n. 1
0
        /// <summary>
        /// 复制
        /// </summary>
        /// <param name="obj">源对象</param>
        /// <param name="value">目的对象</param>
        public void Copy(object obj, object value)
        {
            lock (this)
            {
                if (this.propertyDic == null)
                {
                    this.propertyDic = new Dictionary <string, PropertyInfo>();
                    if (obj != null)
                    {
                        Type t = obj.GetType();
                        foreach (PropertyInfo propertyInfo in t.GetProperties())
                        {
                            if (propertyInfo.CanWrite && propertyInfo.CanRead)
                            {
                                this.propertyDic.Add(propertyInfo.Name, propertyInfo);
                            }
                        }
                    }
                }
            }
            IGetAccessor valueGetAccessor = null;

            if (value is IGetAccessor)
            {
                valueGetAccessor = value as IGetAccessor;
            }
            ISetAccessor objSetAccessor = null;

            if (obj is ISetAccessor)
            {
                objSetAccessor = obj as ISetAccessor;
            }

            foreach (KeyValuePair <string, PropertyInfo> kp in this.propertyDic)
            {
                if (objSetAccessor != null && valueGetAccessor != null)
                {
                    objSetAccessor.SetValue(kp.Key, valueGetAccessor.GetValue(kp.Key));
                }
                else if (objSetAccessor != null && valueGetAccessor == null)
                {
                    objSetAccessor.SetValue(kp.Key, kp.Value.GetValue(value, null));
                }
                else if (objSetAccessor == null && valueGetAccessor == null)
                {
                    kp.Value.SetValue(obj, kp.Value.GetValue(value, null), null);
                }
            }
        }