当前位置: 首页 > 编程语言 > C#

有没有办法测试我的转换以避免异常?分享

时间:2023-04-10 20:16:50 C#

有没有办法测试我的转换以避免使用异常?我正在使用Reflection从DataRows构造任意对象,当橡胶最终遇到道路时,我需要从DataRow获取一个值并将其分配给对象的属性。由于DataRows可能包含不支持转换的类型,因此其中许多将导致必须处理的异常。例如,DBnulls可能出现在DataRow中,或者一种数字格式不能很好地转换为另一种格式等。有什么办法可以避免抛出异常吗?(我不会接受一个巨大的switch语句来检查目标对象属性和源数据中的每个类型组合。)publicvoidMerge(DataRowdata){PropertyInfo[]props=this.GetType().GetProperties(BindingFlags...);foreach(PropertyInfopiinprops.Where(p=>T_IsPrimitive(p.PropertyType))){objectsrc=null;如果(dataAsDataRow.Table.Columns.Contains(pi.Name))src=((DataRow)data)[pi.Name];if(src!=null){if(src.GetType()!=pi.PropertyType){try{src=Convert.ChangeType(src,pi.PropertyType);}catch(InvalidCastExceptione){try{src=Convert.ChangeType(src.ToString(),pi.PropertyType);}catch{抛出e;}}}pi.SetValue(this,src,null);}}}publicboolT_IsPrimitive(Typet){返回t.IsPrimitive||t==类型(小数)||t==类型(字符串)||t==类型(日期时间)||t==typeof(TimeSpan)}那么在我实现这些ChangeType转换之前有什么方法可以查看吗?解决方案感谢Stecya,这就是我想出的:if(src.GetType()!=pi.PropertyType){objectconverted=null;TypeConverter转换器=TypeDescriptor.GetConverter(pi.PropertyType);如果(转换器!=null){如果(转换器.CanConvertFrom(vType))转换=converter.ConvertFrom(src);elseif(converter.CanConvertFrom(typeof(String)))converted=converter.ConvertFrom(src.ToString());}src=已转换;}if(src!=null)pi.SetValue(this,src,null);逻辑等价,优雅,无一例外!使用TypeConverter检查是否可以在类型之间进行转换boolCanConvert(Typefrom,Typeto){TypeConverterconverter=TypeDescriptor.GetConverter(to);返回转换器!=null&&converter.CanConvertFrom(from);您也可以使用此TypeConverter实际上从一种类型转换为另一种类型您可以使用访问者模式,这是一种让函数为您进行类型检查的优雅方式。以上是C#学习教程:有没有办法测试我的转换以避免使用异常?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: