我有以下内容来验证类型:
Boolean valid = Int32.TryParse(value, out result);
如何使用TryParse作为Generic?例如:
public Boolean Validate<T>(Object value) {
// Get TryParse of T type and check if value is of that type.
}
如何验证值以检查它是否为T?
答案 0 :(得分:1)
您可以使用反射来获取TryParse
的正确重载并调用它:
public static bool Validate<T>(string value)
{
var flags = BindingFlags.Public | BindingFlags.Static;
var method = typeof(T).GetMethod(
"TryParse",
flags,
null,
new[] { typeof(string), typeof(T).MakeByRefType() },
null);
if (method != null)
{
T result = default(T);
return (bool)method.Invoke(null, new object[] { value, result });
}
else
{
// there is no appropriate TryParse method on T so the type is not supported
}
}
用法如下:
bool isValid = Validate<double>("12.34");
答案 1 :(得分:0)
并非所有数据类型都实现了解析或tryparse方法。但是,许多类型都有一个关联的TypeConverter,您可以使用它来尝试从字符串转换。
public Boolean Validate<T>(string value)
{
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter != null ? converter.IsValid(value) : false;
}