首页 > Web开发 > 详细

.net TypeConverter

时间:2020-01-13 15:39:44      阅读:67      评论:0      收藏:0      [点我收藏+]

在进行文本解析时,读取一些不规则的自定结构时,用typeConvert是一个非常好的手段.

 1         class StringArrayConvert : TypeConverter
 2         {
 3             public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
 4             {
 5                 var strValue = value as string;
 6                 if (string.IsNullOrEmpty(strValue) == false)
 7                 {
 8                     return strValue.Split(;);
 9                 }
10                 return base.ConvertFrom(context.culture, value);
11             }
12         }
13 
14         class IntArrayConvert : TypeConverter
15         {
16             public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
17             {
18                 var strValue = value as string;
19                 if (string.IsNullOrEmpty(strValue) == false)
20                 {
21                     var intcv = TypeDescriptor.GetConverter(typeof(int));
22                     return strValue.Split(;).Select(x=>(int)intcv.ConvertFromInvariantString(x)).ToArray();
23                 }
24                 return base.ConvertFrom(context.culture, value);
25             }
26         }

根据自己的需求,定义好类似的Convert,对需要赋值的object的fields或是properties进行类型判断,然后调用对应的convert.

        private static object ParseString(string strValue, Type t)
        {
            if ((typeof(object) == t) && !string.IsNullOrEmpty(strValue))
            {
                return strValue;
            }
            var cv = TypeDescriptor.GetConverter(t);
            if ((typeof(string[]) == t) && !string.IsNullOrEmpty(strValue))
                cv = new StringArrayConvert();
            if ((typeof(int[]) == t) && !string.IsNullOrEmpty(strValue))
                cv = new IntArrayConvert();

            return cv.ConvertFromInvariantString(strValue);
        }

通过类似的代码,即可美美的解析了。原生的System.ComponentModel.ArrayConvert只提供了ConvertTo,所以复杂的数组类型就需要自己写转换了。

当然,这种工作不管怎么说,都很麻烦,愿大家都不会碰到这样的需求吧。

.net TypeConverter

原文:https://www.cnblogs.com/Fivee/p/12187316.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!