开发时在做UserControl,需要注意的List<>集合问题~~~!

其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰到以下错误:

提示:属性" ******** "的代码生成失败.错误是:"程序集"********.Version=1.0.0.0,Culture=neutral,..........无标记为序列化""]

例如下面一个MyUserControl,其中写了一个List<>属性

  public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
m_ReceiverList = new List<DuxUser>();
} public MyUserControl(List<DuxUser> receiverlist)
{
InitializeComponent();
m_ReceiverList = receiverlist;
} #region Properties private List<DuxUser> m_ReceiverList=null;
public List<DuxUser> ReceiverList
{
get { return m_ReceiverList; }
set
{
m_ReceiverList = value;
}
}
#endregion
} public class DuxUser //定义的一个DuxUser类
{
public DuxUser() { }
}

这个MyUserControl代码看起来时没有任何问题的,但是只要你往窗体上一拖就是报上面红色字体的错误,如果你是写代码添加到窗体上是不会出错的,只要拖到窗体上去就会报错!
为什么会这样呢?

例如: 把一个MyUserControl控件拖到一个Form1上,那么Form1.Designer.cs里就会出现这么一条代码:

this.myUserControl1.ReceiverList =

((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList")));

这段代码就是错误的根源,因为DuxUser类没有标记为可序列化 [Serializable],所以List<DuxUser>也就不能序列化啦!

为什么Form1.Designer.cs中会有那么一段代码呢,原因在MyUserControl的无参数构造函数上:

m_ReceiverList = new List<DuxUser>();

我们在做集合的时候,一般都会给他实例化一下,这样可以避免调用控件的集合Add() 或者 Remove,foreach 等操作的时候出现Null值异常!

但是就是这段代码,Form1.Designer.cs文件中自动生成了那么一段怪代码,导致出错

解决的办法有3种:

1. 无参数构造方法中 m_ReceiverList=null 或者不写; 然后再Load事件中进行初始化),那么在Form1.Designer.cs中看到的就是this.ReceiverList = null;

需要注意的是:Load事件中要判断集合是否为null值,是null才去初始化,因为有可能是手动写代码添加到容器(如:窗体),而不是拖,写代码的方式有可能在Load之前给集合属性赋值

2. 把DuxUser类,标记为可序列化的类[Serializable]

   [Serializable]
public class DuxUser
{
public DuxUser() { } //.........
}

3. 如下:

     private List<DuxUser> m_ReceiverList=null;

     [Bindable(false), Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public List<DuxUser> ReceiverList
{
get { return m_ReceiverList; }
set
{
m_ReceiverList = value;
}
}

想看到下面这段代码,请选择第二种方法(把类[DuxUser]标记为可序列化):

this.myUserControl1.ReceiverList = ((System.Collections.Generic.List<DuxUser>)(resources.GetObject("myUserControl1.ReceiverList")));

第一:写在这里是为了做笔记..(好记性不如烂笔头)

第二:愿有缘人找到此代码,以免出来问题束手无策.....
---------------------
版权声明:本文为CSDN博主「wxm3630478」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wxm3630478/article/details/4295122

[记录]UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"的更多相关文章

  1. UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"

    开发时在做UserControl,需要注意的List<>集合问题~~~! 其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰 ...

  2. 其他信息: 未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找 到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    记录一下,发布web时遇到的一些问题. 一.报错信息: 其他信息: 未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, Public ...

  3. 未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f351905198cb3”或它的某一个依赖项。未能授予最小权限请求

    问题:运行程序执行到代码报错:未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f3519051 ...

  4. 报错:未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    □ 背景 通过NuGet安装某程序包后,运行程序出现如上错误.   □ 分析 可能是程序集版本不兼容引起的,可以通过NuGet先把程序包删除,然后再安装最新或某个版本的程序包.   □ 解决方法 通过 ...

  5. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  6. oracle "记录被另一个用户锁定"

    出现的原因是有人对某一条数据进行了修改,oracle会通过这个事务记住这条数据,若修改的人没有进行提交或进行回滚记录,oracle是不允许对这条数据在此进行修改的,在这种情况下你要进行修改数据,则会被 ...

  7. oracle数据中记录被另一个用户锁住

    原因:PL/SQL里面执行语句执行了很久都没有结果,于是中断执行,于是就直接在上面改字段,在点打钩(记入改变)的时候提示,记录被另一个用户锁住. 解决方法: 第一步:(只是用于查看哪些表被锁住,真正有 ...

  8. oracle中记录被另一个用户锁住的原因与解决办法

    oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法: 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from ...

  9. oracle中表记录被另一个用户锁住

    应用场景 在查询oracle表时,提示表记录被另一个用户锁住了 有可能是在使用了pl/sql工具后修改某个表记录时,加锁,或者发生故障异常退出,下次登录进去修改不了 查询锁 --查看数据库的锁的来源. ...

随机推荐

  1. FPM十:FORM Repeater

    1.创建feeder class:ZCL_FPM_FORM_REP_DEMO 添加接口类: 2.新建全局内表: DATA:GT_QPGT TYPE TABLE OF QPGT. 3.实列化get_da ...

  2. 一个APACHE TOMCAT漏洞修复

    这种情况加个SSL证书就行了  就是HTTPS协议

  3. django framework插件类视图分页

    分页 继承APIView类的视图中添加分页 from rest_framework.pagination import PageNumberPagination class MyPageNumberP ...

  4. eclipse 工作空间配置UTF-8编码格式

    配置前端页面编码格式 1. Windows-->preferences 2. web-->jsp file-->Encoding 3. OK保存  配置java文件编码格式 1. W ...

  5. 为DS5添加新的gcc工具链

    环境: 步骤: 1.下载mingw32版本的工具链 下面有两个下载工具链的网站: ARM官网的: https://developer.arm.com/tools-and-software/open-s ...

  6. WTL 9.0的变化 - atlctrls.h

    atlctrls.h中是对控件的封装. 第1249行增加: void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(: ...

  7. AcWing 24. 机器人的运动范围

    习题地址 https://www.acwing.com/solution/acwing/content/2970/ 题目描述地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼ ...

  8. .Net反射-基础2-BindingFlags参数

    BindingFlags参数用于指定反射查找的范围在调用下列方法时会用到BindingFlags参数 // 调用方法. InvokeMethod // 创建实例. CreateInstance // ...

  9. ToDoList--HttpMediaTypeNotSupportedException

    org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-url ...

  10. struts2学习2

    拦截器 //拦截器:第一种创建方式 //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁 public class MyInterceptor implements Interceptor { @ ...