開發(fā)時(shí)在做UserControl,需要注意的List<>集合問題~~~! 其他類型的集合可能也存在這樣的問題,但是我沒去測試,在寫集合的時(shí)候一般List<>用的多點(diǎn),所以經(jīng)常碰到以下錯(cuò)誤: 提示:屬性" ******** "的代碼生成失敗.錯(cuò)誤是:"程序集"********.Version=1.0.0.0,Culture=neutral,..........無標(biāo)記為序列化""] 例如下面一個(gè)MyUserControl,其中寫了一個(gè)List<>屬性 例如下面一個(gè)MyUserControl,其中寫了一個(gè)List<>屬性
這個(gè)MyUserControl代碼看起來時(shí)沒有任何問題的,但是只要你往窗體上一拖就是報(bào)上面紅色字體的錯(cuò)誤,如果你是寫代碼添加到窗體上是不會出錯(cuò)的,只要拖到窗體上去就會報(bào)錯(cuò)! 為什么會這樣呢? 例如: 把一個(gè)MyUserControl控件拖到一個(gè)Form1上,那么Form1.Designer.cs里就會出現(xiàn)這么一條代碼: this.myUserControl1.ReceiverList = ((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList"))); 這段代碼就是錯(cuò)誤的根源,因?yàn)镈uxUser類沒有標(biāo)記為可序列化 [Serializable],所以List<DuxUser>也就不能序列化啦! 為什么Form1.Designer.cs中會有那么一段代碼呢,原因在MyUserControl的無參數(shù)構(gòu)造函數(shù)上: m_ReceiverList = new List<DuxUser>(); 我們在做集合的時(shí)候,一般都會給他實(shí)例化一下,這樣可以避免調(diào)用控件的集合Add() 或者 Remove,foreach 等操作的時(shí)候出現(xiàn)Null值異常! 但是就是這段代碼,Form1.Designer.cs文件中自動生成了那么一段怪代碼,導(dǎo)致出錯(cuò) 解決的辦法有3種: 1. 無參數(shù)構(gòu)造方法中 m_ReceiverList=null 或者不寫; 然后再Load事件中進(jìn)行初始化),那么在Form1.Designer.cs中看到的就是this.ReceiverList = null; 需要注意的是:Load事件中要判斷集合是否為null值,是null才去初始化,因?yàn)橛锌赡苁鞘謩訉懘a添加到容器(如:窗體),而不是拖,寫代碼的方式有可能在Load之前給集合屬性賦值 2. 把DuxUser類,標(biāo)記為可序列化的類[Serializable]
3. 如下:
想看到下面這段代碼,請選擇第二種方法(把類[DuxUser]標(biāo)記為可序列化): this.myUserControl1.ReceiverList = ((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList"))); 第一:寫在這里是為了做筆記..(好記性不如爛筆頭) 第二:愿有緣人找到此代碼,以免出來問題束手無策..... |
|