程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 對象屬性之間的相互賦值

對象屬性之間的相互賦值

編輯:關於ASP.NET

(一)前言

當不同命名空間下的兩個類具有相同的屬性,並且需要進行相互賦值時,如下圖中的 Jasen.Core.Info類的實例與Jasen.Core.Test.Info類的實例需要相互賦值時,按照一般的思路直接賦值就可 以了。通常,這種情況在調用Web Service的時候比較常見。當需要轉換的類很多時,亦或者需要轉換的屬性 很多時,我們就需要根據一定的規則來對這種場景來進行設計了,誰也不會傻布拉吉的一個一個屬性的去給對 象賦值。

(二)ObjectMapper 類負責對象之間相對應的屬性間的賦值

/// <summary>
    /// 
    /// </summary>
    public class ObjectMapper  
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sourceType"></param>
        /// <param name="targetType"></param>
        /// <returns></returns>
        public static IList<PropertyMapper> GetMapperProperties(Type sourceType, Type targetType)
        {
            var sourceProperties = sourceType.GetProperties();
            var targetProperties = targetType.GetProperties();
    
            return (from s in sourceProperties
                    from t in targetProperties
                    where s.Name == t.Name && s.CanRead && t.CanWrite && s.PropertyType == t.PropertyType
                    select new PropertyMapper
                              {
                                  SourceProperty = s,
                                  TargetProperty = t
                              }).ToList();
        }       
    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        public static void CopyProperties(object source, object target)
        {
            var sourceType = source.GetType();
            var targetType = target.GetType();
            var mapperProperties = GetMapperProperties(sourceType, targetType);
    
            for (int index = 0,count=mapperProperties.Count; index < count; index++)
            {
                var property = mapperProperties[index];
                var sourceValue = property.SourceProperty.GetValue(source, null);
                property.TargetProperty.SetValue(target, sourceValue, null);
            }
        }
    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved