其他分享
首页 > 其他分享> > .net TypeConverter

.net TypeConverter

作者:互联网

在进行文本解析时,读取一些不规则的自定结构时,用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,所以复杂的数组类型就需要自己写转换了。

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

标签:return,string,object,value,strValue,TypeConverter,net,IsNullOrEmpty
来源: https://www.cnblogs.com/Fivee/p/12187316.html