快速业务通道

ASP.net控件开发系列之五

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
Context context, Type destinationType) {//string能不能转换成目标类
       if ((destinationType == typeof(string)) ||
         (destinationType == typeof(InstanceDescriptor))) {//System.ComponentModel.Design.Serialization.InstanceDescriptor
     //提供创建对象的实例所需的信息,此处返回转换器关联类型的实例
         return true;
       }
       return base.CanConvertTo(context, destinationType);//只有实现了ConverTo目标类型才能为TRUE(我们在后面实现了string),如果String可以转换成目标类型,    //那么也会为TRUE,因为这里我们可以将之转成String,再调用String的转换。
     }
     public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {//从一种类型转换成我们的类型
       if (value == null) {
         return new YourType();//空值来,默认实现
       }
       if (value is string) {//如果是string,定制转化逻辑
         string s = (string)value;
         if (s.Length == 0) {
           return new YourType();
         }
  //以下的例子实现"20,30"转换成new YourType(20,30),分两步,分隔,变Int
         string[] parts = s.Split(culture.TextInfo.ListSeparator[0]);
         if (parts.Length != 2) {
           throw new ArgumentException("Invalid YourType", "value");
         }
         TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(Int32));
         return new YourType((int)intConverter.ConvertFromString(context, culture, parts[0]),
           (int)intConverter.ConvertFromString(context, culture, parts[1]));
       }
       return base.ConvertFrom(context, culture, value);//还是要调用一下基类的方法。
     }
     public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {//我们的类型转换成其它类型
       if (value != null) {//先确定源类型是不我们的要转的类型。
         if (!(value is YourType)) {
           throw new ArgumentException("Invalid YourType", "value");
         }
       }
       if (destinationType == typeof(string)) {//转成string的逻辑
         if (value == null) {
           return String.Empty;
         }
         YourType yourType = (YourType)value;
  //以下的例子将yourType的两个int属性变成"属性值1,属性值2"的字符串。
         TypeConverter intConverter = TypeDescriptor.GetConverter(typeof(Int32));
         return String.Join(culture.TextInfo.ListSeparator,
           new string[] {
                   intConverter.ConvertToString(context, culture, yourType.Value_1),
                   intConverter.ConvertToString(context, culture, yourType.Value_2)
                 });
       }
       else if (destinationType == typeo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号