在系統開發過程中,有一些代碼是必須反覆 寫的.比如實體的賦值過程(不用實體的免看).
Eg: XXX.xxx=XXX
雖然可以通過codesmith來生成賦值,但是免不了代碼冗長.如果是根據數據庫生成的話,我們還要刪除非必要的屬性.而且過分依賴數據庫.
特別是當你需要不同實體之間進行相同屬性拷貝時,你必須一個屬性一個屬性賦值.實在太煩了.
我在做個java項目時無意發現了一個PropertyUtils類.就是用來屬性複製的類,探究原理之後.發現其實.net裏也是同樣可以實現的.
.net的反射就是實現的辦法. using System.Reflection;
/// <summary>
/// 對象屬性拷貝(全匹配拷貝)
/// </summary>
/// <param name="obj1">源對象</param>
/// <param name="obj2">目標對象</param>
/// <returns>目標對象</returns>
public static object PropertyCopy(object obj1,object obj2)
{
Type souType=obj1.GetType();
Type tarType = obj2.GetType();
PropertyInfo[] pis=souType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
if(null!=pis)
{
foreach(PropertyInfo pi in pis)
{
string propertyName=pi.Name;
PropertyInfo pit=tarType.GetProperty(propertyName);
if(pit !=null)
{
pit.SetValue(obj2,pi.GetValue(obj1,null),null);
}
}
}
return obj2;
}
實際上可以只傳兩個Type進來也可以的.
但是這個有個問題,就是當兩個實體的同名屬性類型不匹配時,會拋意外.我這個只是個例子,沒有try出來.
基本原理就是這樣子.呵呵.我的代碼風格一般,估計看壞大家的眼睛了.
我自己做了個類似Nhibernate的數據綁定(暫時支持單表),完善ing.呵呵有空再切磋咯
如果有什麼問題,歡迎大家指正