如何使用泛型类型验证变量
本文关键字:变量 验证 泛型类型 何使用 | 更新日期: 2023-09-27 18:25:46
我有以下内容来验证类型:
Boolean valid = Int32.TryParse(value, out result);
如何将TryParse用于泛型?例如:
public Boolean Validate<T>(Object value) {
// Get TryParse of T type and check if value is of that type.
}
如何验证值以检查它是否为T类型?
您可以使用反射来获得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");
并非所有数据类型都实现parse或锥虫方法。但是,许多类型都有一个关联的TypeConverter,您可以使用它尝试从字符串进行转换。
public Boolean Validate<T>(string value)
{
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter != null ? converter.IsValid(value) : false;
}