我正在尝试创建一个使用“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; } }
您应该使用TypeDescriptor类:
public static T Convert<T>(this string input) { try { var converter = TypeDescriptor.GetConverter(typeof(T)); if(converter != null) { // Cast ConvertFromString(string text) : object to (T) return (T)converter.ConvertFromString(input); } return default(T); } catch (NotSupportedException) { return default(T); } }