C# 有没有办法测试我的转换以避免使用异常?

C# 有没有办法测试我的转换以避免使用异常?,c#,.net-4.0,exception-handling,C#,.net 4.0,Exception Handling,我使用反射从数据行构造任意对象,当橡胶最终遇到道路时,我需要从数据行获取一个值,并将其指定给对象上的属性 因为DataRows可能充满了不支持转换的类型,其中许多类型导致必须处理的异常。例如,DBnulls可能会在DataRow中出现,或者某些数字格式无法很好地转换为另一种格式,等等。有什么方法可以避免抛出异常吗?(我不会接受庞大的switch语句检查目标对象属性和源数据中的每个类型组合。) 那么,在我使用这些ChangeType转换之前,有没有什么方法可以查看一下 解决方案 感谢Stecya

我使用反射从数据行构造任意对象,当橡胶最终遇到道路时,我需要从数据行获取一个值,并将其指定给对象上的属性

因为DataRows可能充满了不支持转换的类型,其中许多类型导致必须处理的异常。例如,DBnulls可能会在DataRow中出现,或者某些数字格式无法很好地转换为另一种格式,等等。有什么方法可以避免抛出异常吗?(我不会接受庞大的switch语句检查目标对象属性和源数据中的每个类型组合。)

那么,在我使用这些
ChangeType
转换之前,有没有什么方法可以查看一下


解决方案

感谢Stecya,以下是我的想法:

     if( src.GetType() != pi.PropertyType ) {
        object converted = null;
        TypeConverter converter = TypeDescriptor.GetConverter(pi.PropertyType);
        if( converter != null ) {
           if( converter.CanConvertFrom(vType) )
              converted = converter.ConvertFrom(src);
           else if( converter.CanConvertFrom(typeof(String)) )
              converted = converter.ConvertFrom(src.ToString());
        }
        src = converted;
     }
     if( src != null )
        pi.SetValue(this, src, null);
逻辑上相当,优雅,没有更多的例外

您可以使用。这是一种让函数为您执行类型检查的优雅方式。

用于检查您是否可以在类型之间进行转换

bool CanConvert(Type from , Type to)
{
    TypeConverter converter = TypeDescriptor.GetConverter(to);
    return converter != null && converter.CanConvertFrom(from);
}

您还可以使用此类型转换器从一种类型转换为另一种类型

访客模式不适用。如您所见,我的所有转换都是伪基元类型-我无法进入并更改这些本机类型的代码以实现从DataRow类型转换的通用方法。您可以添加一个扩展方法。如果
TypeDescriptor.GetConverter(Type T)
为null或
,是否保证CanConvertFrom(Type R)
为false,那么Convert.ChangeType(T obj,类型R)会失败吗?我不想关闭任何本来可能成功的转换。它应该关闭,但如果您想确保使用TypeConverter来更改类型
bool CanConvert(Type from , Type to)
{
    TypeConverter converter = TypeDescriptor.GetConverter(to);
    return converter != null && converter.CanConvertFrom(from);
}