如何检查Convert.ChangeType是否可以转换?

时间:2016-11-17 19:56:57

标签: c# .net-core coreclr

我有一个字符串,我想将该字符串转换为指定的类型。但是,在实际转换发生之前,我还想检查是否可以将值转换为目标类型。

我有进行转换的通用扩展方法

public static class StringExtensions
{
    public static TDest ConvertStringTo<TDest>(this string src)
    {
        if (src == null)
        {
            return default(TDest);
        }           

        return ChangeType<TDest>(src);
    }

    private static T ChangeType<T>(string value)
    {
        var t = typeof(T);                                    
        if (t.GetTypeInfo().IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
        {   
            t = Nullable.GetUnderlyingType(t);
        }

        return (T)Convert.ChangeType(value, t);
    }
}

只要源字符串有效,上述方法就会起作用。但是,如果源字符串无效,我将获得异常。例如

 var source = "this is integer";
 source.ConvertStringTo<int?>();

这会抛出异常

  

输入字符串的格式不正确。

 var source = "12/32/2015";
 source.ConvertStringTo<DateTime?>();

这会抛出异常

  

字符串未被识别为有效的DateTime。

如果方法无法转换值,我想返回default(T)。我知道我可以通过添加try catch来做到这一点,但我一直在寻找一种解决方案而不添加try catch。

请注意
我已经通过了SO post here,但答案只检查了空 我也使用.Net Core。

0 个答案:

没有答案