我有一个字符串,我想将该字符串转换为指定的类型。但是,在实际转换发生之前,我还想检查是否可以将值转换为目标类型。
我有进行转换的通用扩展方法
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。