我试图创建一个通用扩展,使用'TryParse'检查字符串是否为给定类型:public static bool Is<T>(this string input){ T notUsed; return T.TryParse(input, out notUsed);}由于无法解析符号“ TryParse”,因此无法编译据我了解,“ TryParse”不是任何接口的一部分。这有可能吗?更新:使用下面的答案,我想出了:public static bool Is<T>(this string input){ try { TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input); } catch { return false; } return true;}它工作得很好,但是我认为以这种方式使用异常对我来说不合适。更新2:修改为传递类型,而不是使用泛型:public static bool Is(this string input, Type targetType){ try { TypeDescriptor.GetConverter(targetType).ConvertFromString(input); return true; } catch { return false; }}
3 回答
LEATH
TA贡献1936条经验 获得超6个赞
使用try / catches进行流控制是一个糟糕的策略。抛出异常会导致性能下降,而运行时会解决该异常。而是在转换之前验证数据。
var attemptedValue = "asdfasdsd";
var type = typeof(int);
var converter = TypeDescriptor.GetConverter(type);
if (converter != null && converter.IsValid(attemptedValue))
return converter.ConvertFromString(attemptedValue);
else
return Activator.CreateInstance(type);
- 3 回答
- 0 关注
- 405 浏览
添加回答
举报
0/150
提交
取消