首页 / 知识
关于c#:PropertyGrid,DefaultValueAttribute,动态对象和枚举
2023-04-16 03:17:00

PropertyGrid, DefaultValueAttribute, dynamic object, and enumerations注意:我正在使用.Net 1.1,尽管我并不完全反对使用更高版本的答案。 我正在PropertyGrid中显示一些动态生成的对象。这些对象具有数字,文本和枚举属性。目前,我在设置枚举的默认值时遇到问题,因此它们在列表中不会总是显示为粗体。枚举本身也是动态生成的,并且除了默认值外,似乎工作正常。 首先,我想展示在引起错误的情况下如何生成枚举。第一行使用自定义类来查询数据库。只需将这行替换为DataAdapter或使用数据库值填充DataSet的首选方法。我正在使用第1列中的字符串值来创建我的枚举。
现在介绍如何创建类型。这很大程度上基于此处提供的示例代码。本质上,将pFeature视为数据库行。我们遍历各列,将列名用作新的属性名,并使用列值作为默认值;至少是目标。
最后,我们使用该类型创建它的实例并加载默认值,以便稍后可以使用PropertiesGrid显示它。
但是,当我们尝试获取枚举的默认值时,这会导致错误。未设置DefaultValueAttribute dva,因此在尝试使用它时会导致异常。 如果我们更改此代码段:
为此:
获取DefaultValueAttribute dva没问题;但是,该字段然后在PropertiesGrid中以粗体显示,因为它与默认值不匹配。 有人将我设置为生成的枚举的默认值时为何无法获得DefaultValueAttribute吗?您可能已经猜到了,我仍然是Reflection的新手,所以这对我来说是相当新的。 谢谢。 更新:针对alabamasucks.blogspot,使用ShouldSerialize当然可以解决我的问题。我能够使用普通的类创建方法;但是,我不确定如何对生成的类型执行此操作。据我所知,我将需要使用MethodBuilder并生成IL以检查该字段是否等于默认值。听起来很简单。我想用IL代码表示:
我可以使用ildasm.exe从类似的代码中获取IL代码,但是我有几个问题。如何在IL代码中使用val变量?在我的示例中,我使用了一个值为0的int。
这肯定会变得棘手,因为IL对于每种类型都有不同的加载命令。当前,我使用整数,双精度型,字符串和枚举,因此代码必须根据类型自适应。 有人知道怎么做吗?还是我朝着错误的方向前进? 我不确定如何使该属性正常工作,但是还有另一个选项可能会更容易。 除了检查DefaultValueAttribute,PropertyGrid还使用反射来查找名为" ShouldSerializeProperty Name"的方法,其中[Property Name]是所讨论属性的名称。如果属性设置为非默认值,则此方法应返回布尔值true,否则返回false。使用反射创建一个返回正确值然后修复该属性的方法可能会更容易。 您应该尝试使用DefaultValueAttribute并接受String和Type参数,并传入字符串枚举值(val.ToString)和枚举的类型。 |
最新内容
相关内容
linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux查看动态命令?
linux查看动态命令?,系统,状态,工具,实时,时间,命令,工作,信息,地址,百分比,linux怎样使用top命令查看系统状态1、t:切换显示进程和CPU状态信息linux动态链接库命令?
linux动态链接库命令?,代码,项目,工程,电脑,网上,文件,程序,静态,命令,目录,如何在linux下写动态链接库并卖给别人1、执行qmake main.pro生成mlinux动态执行命令?
linux动态执行命令?,时间,信息,名字,工作,网上,业务,工具,对比,地址,下来,如何在linux下让一个命令一直运行,然后跟踪结果日志1、编写一个shellinux命令行动态输出?
linux命令行动态输出?,标准,工作,信息,系统,命令,地址,文件,数据,管理,设备,linux命令输出到屏幕的同时保存到文件su -c command output.txtlinux文字动态命令?
linux文字动态命令?,系统,工作,地址,工具,管理,网络,命令,分析,目录,代码,Linux命令大全1、linux常用命令有pwd命令、cd命令、ls命令、cat命令pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向实现Python对象的持久化存储
实现Python对象的持久化存储,数据,对象,系统,函数,培训,标准,环境,管理,参数,文件,Python中有个序列化过程叫作pickle,它能够实现任意对象与文python之访问对象的元数据
python之访问对象的元数据,数据,异常,培训,属性,模块,对象,类型,定义,文档,实例,当你对一个你构造的对象使用dir()时,可能会发现列表中的很多python之执行对象
python之执行对象,代码,数据,信息,概念,培训,通用,对象,属性,方法,赋值,有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的Python之数据库游标对象详解
Python之数据库游标对象详解,软件,代码,一致,培训,数据库,游标,对象,方法,事务,操作,常用数据库:MySQL、Oracle、SQLite但是包嵌入到Python中