开发时在做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. SpringBoot健康检查实现原理

    相信看完之前文章的同学都知道了SpringBoot自动装配的套路了,直接看spring.factories文件,当我们使用的时候只需要引入如下依赖 <dependency> <gro ...

  2. java hibnernet测试@test 时不提交保存的事务

    开始保存时不能提交数据报错: org.hibernate.HibernateException: Could not obtain transaction-synchronized Session f ...

  3. 【转】PHP利用Apache、Nginx的特性实现免杀Webshell

    转载备忘: get_defined_vars().getallheaders()是两个特性函数,我们可以通过这两个函数来构造我们的webshell. 前几天看到的,一直忘记写,填坑. 环境 函数 用法 ...

  4. MySql数据库 timeout超时报警的解决方法

    今天做查询mysql数据库是,因为数据量大所以报错 最后在 连接的地方做了如下改动: MySqlCommand cmd = new MySqlCommand(procedureName, conn); ...

  5. FFmpeg基础一

    来源:http://blog.csdn.net/chance_yin/article/details/10323441 一.研究数字多媒体,首先要了解几个基本术语(ffmpeg的相关文档几乎都是英文的 ...

  6. Linux的基本指令-Linux从入门到精通第二天(非原创)

    文章大纲 一.指令与选项二.基础指令(重点)三.进阶指令(重点)四.学习资料下载五.参考文章   一.指令与选项 什么是Linux的指令?指在Linux终端(命令行)中输入的内容就称之为指令.   一 ...

  7. django迁移脚本

    执行migrate报错的解决办法: 想知道migrate为什么报错,需要先了解migrate到底做了什么事情 migrate做了什么事情? 1.将相关的迁移脚本翻译成sql语句,然后在数据库中执行 2 ...

  8. Nginx七层负载均衡的几种调度算法

      Nginx是一款轻量级的高性能web服务器,同时也是一款非常优秀的负载均衡器和反向代理服务器.由于支持强大的正则匹配规则.动静分离.URLrewrite功能及安装配置简单且对网络稳定性依赖非常小等 ...

  9. Linux操作系统的压缩、解压缩工具介绍

    Linux操作系统的压缩.解压缩工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.compress/uncompress命令常用参数 Linux compress命令: ...

  10. linux 利器

    ncat nc strace dmesg    很重要,好多错误从程序的角度无法得到答案