c# 類型拷貝

來源:互聯網
上載者:User

標籤:

/// <summary>
/// 類 名:EntityHelper
/// 類 說 明:實體操作方法類
/// :
/// 建立時間:2013/8/12
/// </summary>
public static class EntityHelper
{
/// <summary>
/// 方 法 名:DataRowToEntity
/// 方法說明:轉化資料行到實體物件
/// :
/// 建立時間:2013/8/12
/// </summary>
/// <typeparam name="T">實體類型</typeparam>
/// <param name="dr">資料行</param>
/// <param name="excludefields">不進行賦值的欄位</param>
/// <returns>實體物件</returns>
public static T DataRowToEntity<T>(DataRow dr, string excludefields) where T : new()
{
Type t = typeof(T);
PropertyInfo[] pinfos = t.GetProperties();
T obj = new T();
foreach (PropertyInfo pi in pinfos)
{
if (!dr.Table.Columns.Contains(pi.Name))
continue;
if (!string.IsNullOrWhiteSpace(excludefields) && excludefields.Contains(pi.Name))
continue;
if (dr[pi.Name] != DBNull.Value)
pi.SetValue(obj, dr[pi.Name], null);
else
pi.SetValue(obj, null, null);
}
return obj;
}
/// <summary>
/// 方 法 名:DataRowToEntity
/// 方法說明:轉化資料行到實體物件
/// :
/// 建立時間:2013/8/12
/// </summary>
/// <typeparam name="T">實體類型</typeparam>
/// <param name="dr">The dr.</param>
/// <returns></returns>
public static T DataRowToEntity<T>(DataRow dr) where T : new()
{
return DataRowToEntity<T>(dr, string.Empty);
}
/// <summary>
/// 方 法 名:DataTableToEntityList
/// 方法說明:轉化資料行到實體物件
/// :
/// 建立時間:2013/8/12
/// </summary>
/// <typeparam name="T">實體類</typeparam>
/// <param name="dt">資料表</param>
/// <returns></returns>
public static List<T> DataTableToEntityList<T>(DataTable dt) where T : new()
{
return DataTableToEntityList<T>(dt,null);
}

/// <summary>
/// 方 法 名:DataTableToEntityList
/// 方法說明:轉化資料行到實體物件
/// :
/// 建立時間:2013/8/12
/// </summary>
/// <typeparam name="T">實體類</typeparam>
/// <param name="dt">資料表</param>
/// <param name="excludefields">不進行賦值的欄位</param>
/// <returns></returns>
public static List<T> DataTableToEntityList<T>(DataTable dt,string excludefields) where T : new()
{
List<T> list = new List<T>();
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
T t = DataRowToEntity<T>(dr,excludefields);
if (t != null)
list.Add(t);
}
}
return list;
}
/// <summary>
/// 複製實體
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static T CopyEntity<T>(T source) where T : new()
{
Type t = typeof(T);
PropertyInfo[] pinfos = t.GetProperties();
T obj = new T();
foreach (PropertyInfo pi in pinfos)
{
object v = GetMemberValue(source,pi);
pi.SetValue(obj, v, null);
}
return obj;
}
/// <summary>
/// 判斷兩個實體是否一樣
/// </summary>
/// <param name="source"></param>
/// <param name="dest"></param>
/// <returns></returns>
public static bool CheckEntityEquals(object source, object dest)
{
Type t = source.GetType();
PropertyInfo[] pinfos = t.GetProperties();
foreach (PropertyInfo pi in pinfos)
{
object v1 = GetMemberValue(dest, pi);
object v = GetMemberValue(source, pi);
if (!object.Equals(v1, v))
return false;
}
return true;
}

/// <summary>
/// 方法說明:擷取實體成員的值
/// 作 者:
/// 建立時間:2013/9/14
/// </summary>
/// <param name="entity">實體</param>
/// <param name="member">實體成員資訊</param>
/// <returns>實體成員的值</returns>
public static object GetMemberValue(object entity, MemberInfo member)
{
if ((entity == null) || (member == null))
{
return null;
}

object value = null;

switch (member.MemberType)
{
case MemberTypes.Field:
FieldInfo field = member as FieldInfo;
if (field != null)
{
value = field.GetValue(entity);
}
break;
case MemberTypes.Property:
PropertyInfo property = member as PropertyInfo;
if (property != null)
{
value = property.GetValue(entity, null);
}
break;
default:
break;
}

return value;
}
/// <summary>
/// 方法說明:擷取實體成員的值
/// 作 者:
/// 建立時間:2013/9/14
/// </summary>
/// <param name="entity">實體</param>
/// <param name="memberName">實體成員名稱</param>
/// <param name="ignoreCase">是否忽略大小寫</param>
/// <returns>實體成員的值</returns>
public static object GetMemberValue(object entity, string memberName, bool ignoreCase)
{
if ((entity == null) || (string.IsNullOrEmpty(memberName)))
{
return null;
}

MemberInfo[] members;
if (ignoreCase)
{
members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
}
else
{
members = entity.GetType().GetMember(memberName);
}

if ((members == null) || (members.Length == 0))
{
return null;
}

return GetMemberValue(entity, members[0]);
}

public static void SetMemberValue(object entity, string memberName, object memberValue)
{
if ((entity == null) || (string.IsNullOrEmpty(memberName)))
{
return;
}

MemberInfo[] members;
members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
if ((members == null) || (members.Length == 0))
{
return;
}
if (members[0] is FieldInfo)
{
if (memberValue == DBNull.Value)
(members[0] as FieldInfo).SetValue(entity, null);
else
(members[0] as FieldInfo).SetValue(entity, memberValue);
}
else if (members[0] is PropertyInfo)
{
if (memberValue == DBNull.Value)
(members[0] as PropertyInfo).SetValue(entity, null, null);
else
(members[0] as PropertyInfo).SetValue(entity, memberValue,null);
}
}
}
}

c# 類型拷貝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.