c 用反射原理遞迴遍歷複雜實體物件

2022-07-17 08:33:10 字數 2170 閱讀 5067

之前在網上看到的都是遍歷那種比較簡單的實體物件,但是如果有實體巢狀,甚至是包含有list這種屬性的時候就沒有辦法處理了。通過遞迴遍歷的方式可以完成對複雜實體物件的所有屬性的遍歷,可以取值和賦值。

下面是關鍵部分的**,有什麼不對的地方路過的大大一定要指點哈。

using system.reflection;}}

利用反射實現**式excel文件的匯出:

上次客戶提出了要將資料匯出到類似上圖的固定格式的excel文件中,當然真實的**不是上面那樣的,而且**的格式有十多種,最後採用的解決辦法就是利用c#的反射。大概的思路是這樣的,為每種匯出的**樣式都做乙個xml的配置檔案,然後記錄每個需要複製的文字框的座標,以及這個值在實體類中的名稱,針對上面的那種**格式,xml配置檔案是這樣的:

<?xml version="1.0" encoding="utf-8"?>

43

10344

10445

105131

18

3858

78然後從資料庫中獲取資料存入到實體類中,用反射遍歷實體類的所有屬性,如果xml中得propertyname節點的值和當前屬性的屬性名相等,那麼就可以通過xml提供的座標給excel**賦值了。這樣做的乙個好處是,可以實現不同**的通用賦值,即使翻頁顯示也能應對(比如上面的銷售記錄每頁只能顯示4條,而程式中是構造的10條銷售記錄,只能通過分頁顯示完),不用為每種格式都去寫一種實現,即使**的樣式有所變動也不用改程式,只需更改一下xml就好了。

語言組織和表達的能力不行,還是直接上碼:

using system;

using system.collections.generic;

using system.web;

using system.reflection;

using system.xml;

///

///excel匯出

///

public class excelexport

///

/// 模擬從資料庫獲取資料

///

///

public employee getinfo()

return e;

}//            }

//        }

//    }

//}///

/// 屬性賦值

///

public employee setpropertyvalue()

employee emp = getinfo();

listlist = formatemplyeeobj(emp);

for (int i = 0; i < list.count;i++ )

}foreach (employee emptemp in list)

excel.close(true);

return emp;

}///

/// 設定值

///

private void setvalue()

}///

/// 格式化員工物件,便於翻頁顯示

///

public listformatemplyeeobj(employee emp)

else

list.add(infotemp);}}

}return list;

}///

/// 實體物件拷貝

///

///

///

public void cloneentityobject(object srcobj, object desobj)

if (srcobj.gettype() != desobj.gettype())

system.reflection.propertyinfo info = srcobj.gettype().getproperties();

foreach (system.reflection.propertyinfo property in info)

}另外excel的操作類在之前的文章中有,這裡就不再貼了。

用棧明白遞迴原理

遞迴 如果在乙個函式 過程或資料結構的定義又應用了它自身,那麼這個函式 過程或資料結構稱是遞迴定義的,簡稱遞迴。遞迴最重要的是遞迴式和遞迴邊界。簡化說明 乙個函式呼叫自己 函式中有終止條件 通過符號來連線返回的函式 用棧解釋 斐波那契數列 int f n if n 1 else 運用遞迴的時候,系統...

C 基礎系列 反射的原理

反射 reflection 的內容在部落格中已經寫了一篇,什麼是反射,反射的使用,反射優缺點總結 在面試中突然被問道反射的原理,按照理解反射就是在reflection命名空間和物件的type物件獲取類的方法 屬性 特性等成員資訊,但是又被問道為什麼可以獲取這些成員資訊?就是反射機制依據的是什麼,讓其...

BinaryTree 遞迴遍歷 建樹 C語言

include include include typedef char eleltype 定義結構體 typedef struct btnode,binarytree 申請結點 btnode buynode 釋放結點 void freenode btnode p 遞迴先序遍歷二叉樹 void pr...