我试图创建一个通用扩展,使用’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); } }