C#通用类型转换器

C#通用类型转换器

引子

    在最近做的一个项目中,因为要在设计时和运行时都需要通过PropertyGrid对一些自定义类型的属性进行编辑,比如弹出窗体式编辑、下拉框式的编辑还有属性展开编辑等各种方式,查看了VS自己的一些控件的属性编辑,知道这就是我想要的。
    还有,就是自定义类型和字符串之间的转换(类似于int.Parse和int.TryParse这些方法),也是我经常要用到和实现的。


技术准备
   针对第一个问题,我们都知道,在设计时对属性编辑,VS会自动调用这些类型的TypeConverterAttribute和EditorAttribute等这些类型定义时候设置的类型转换器和类型编辑器。
   针对第二个问题,就相对简单了,就是实现一个自定义类型的TypeConverter。
   由于现在我需要编辑的类型都是自定义类型,并且还有一定的嵌套关系,所有要想实现相应的效果,就必须得实现我所有自定义类型的“类型转换器”和“类型编辑器”。“所有的”自定义类型,想起这个就知道工作量,海了。在起初我还耐心实现了几个自定义类型的TypeConverter,(相信针对特定类型实现转换器,大伙儿都有自己的两把刷子,不废话了)。但是,想起来还有很多自定义类型,我实在忍无可忍了。
   根据以往实现TypeConverter的经验,发现了这些“类型转换器”之间很多的共同之处。抓住这点,我决定实现一个“通用的类型转换器”,把大部分的工作都交由它处理,岂不乐哉。

开始
   在.Net或C++中,要实现“通用性”,大家第一个想起来的肯定就是泛型了,不错,实现这个无非是使用了下面的几项技术:泛型,反射。
   现把这个“通用类型转换器”公布出来,可能还有些纰漏之处,还请大家多指教。

 

 

 

使用举例

1、对属性进行分组编辑:

一些自定义类型

在自定义的控件中使用LinearBrush类型添加一个属性

在VS属性设计框中就可以看到效果了。

 

2、自定义类型和字符串之间的转换

 

 

结束
以上就是“通用类型转换器”的代码,及其使用举例,希望能减轻一点大家的重复的工作量,有什么不当之处,还请指出,方便大家,共同提高。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
----------Database-------------- 1.DataTable帮助类(DataTableHelper.cs) 2.Access数据库文件操作辅助类(JetAccessUtil.cs) 5.查询条件组合辅助类(SearchCondition.cs) 6.查询信息实体类(SearchInfo.cs) 8.Sql命令操作函数(可用于安装程序的时候数据库脚本执行)(SqlScriptHelper.cs) ----------Device-------------- 声音播放辅助类(AudioHelper.cs) 摄像头操作辅助类,包括开启、关闭、抓图、设置等功能(Camera.cs) 提供用于操作【剪切板】的方法(ClipboardHelper.cs) 获取电脑信息(Computer.cs) 提供用户硬件唯一信息的辅助类(FingerprintHelper.cs) 读取指定盘符的硬盘序列号(HardwareInfoHelper.cs) 提供访问键盘当前状态的属性(KeyboardHelper.cs) 全局键盘钩子。这可以用来在全球范围内捕捉键盘输入。(KeyboardHook.cs) 模拟鼠标点 击(MouseHelper.cs) 全局鼠标钩子。这可以用来在全球范围内捕获鼠标输入。(MouseHook.cs) MP3文件播放操作辅助类(MP3Helper.cs) 关联文件(ExtensionAttachUtil.cs) 注册文件关联的辅助类(FileAssociationsHelper.cs) 打开、保存文件对话框操作辅助类(FileDialogHelper.cs) 常用的文件操作辅助类FileUtil(FileUtil.cs) INI文件操作辅助类(INIFileUtil.cs) 独立存储操作辅助类(IsolatedStorageHelper.cs) 序列号操作辅助类(Serializer.cs) 获取一个对象,它提供用于访问经常引用的目录的属性。(SpecialDirectories.cs) 简单的Word操作对象(WordCombineUtil.cs) 这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) XML操作类(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。(ArgumentValidation.cs) 这个类提供了实用方法的字节数组和图像之间的转换。(ByteImageConvertor.cs) byte字节数组操作辅助类(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的类(ConvertHelper.cs) CRC校验辅助类(CRCUtils.cs) 枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs) 常用的字符串常量(StringConstants.cs) 简要说明TextHelper。(StringUtil.cs) 获取中文字首字拼写,随机发生,按指定概率随机执行操作(Util.cs) 各种输入格式验证辅助类(ValidateUtil.cs) ----------Network-------------- Cookie操作辅助类(CookieManger.cs) FTP操作辅助类(FTPHelper.cs) HTML操作类(HttpHelper.cs) 网页抓取帮助(HttpWebRequestHelper.cs) Net(NetworkUtil.cs) IE代理设置辅助类(ProxyHelper.cs) ----------Winform-------------- 跨线程的控件安全访问方式(CallCtrlWithThreadSafety.cs) CheckBoxList(CheckBoxListUtil.cs) 窗口管理类(ChildWinManagement.cs) 由马丁·米勒http://msdn.microsoft.com/en-us/library/ms996492.aspx提供一个简单的方法打印工作的一个RichTextBox一个帮手(ExRichTextBoxPrintHelper.cs) 显示,隐藏或关闭动画形式。(FormAnimator.cs) 对窗体进行冻结、解冻操作辅助类(FreezeWindowUtil.cs) 窗体全屏操作辅助类(Ful
C#中,`Distinct`方法用于从集合中去除重复的元素。默认情况下,`Distinct`方法使用元素的默认相等比较来确定元素是否相等。然而,有时候我们可能需要使用自定义的比较来进行元素比较。 引用中展示了一个自定义的扩展方法`Distinct`,该方法接受一个`keySelector`委托作为参数来指定元素的比较键。该方法遍历集合中的元素,使用一个`HashSet`来记录已经出现过的键,如果当前元素的键不存在于`HashSet`中,则将其添加到结果中。 引用展示了如何使用`Distinct`方法来去除集合中的重复元素。在这个例子中,集合`list`通过指定属性`Age`和`Name`进行比较,并将结果转换为`List`类型。 引用中提到了另一种通过重写`Equals`和`GetHashCode`方法来实现元素比较的方式。这种方式需要为每个类都实现一个比较,不太通用。然而,可以通过使用委托来实现一个通用的解决方案。该解决方案定义了一个`DynamicEqualityComparer`类,该类实现了`IEqualityComparer`接口,接受一个自定义的比较委托作为参数。在此基础上,`Distinct`方法可以使用一个通用的比较来去除重复元素。 综上所述,C#中的`Distinct`方法可以通过默认的相等比较或自定义的比较来去除集合中的重复元素。您可以使用扩展方法来实现自定义的比较逻辑,或者重写`Equals`和`GetHashCode`方法来实现类特定的比较

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值