.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