C# 如何使用泛型类型验证变量
我有以下方法来验证类型:C# 如何使用泛型类型验证变量,c#,C#,我有以下方法来验证类型: 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并检查值是否为该类型。 } 如何验证
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并检查值是否为该类型。
}
如何验证值以检查其是否为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验证(字符串值)
{
var flags=BindingFlags.Public | BindingFlags.Static;
var method=typeof(T).GetMethod(
“锥虫”,
旗帜,
无效的
新[]{typeof(string),typeof(T).MakeByRefType()},
无效);
if(方法!=null)
{
T结果=默认值(T);
return(bool)method.Invoke(null,新对象[]{value,result});
}
其他的
{
//T上没有合适的TryParse方法,因此不支持该类型
}
}
用法如下所示:
bool isValid = Validate<double>("12.34");
bool isValid=Validate(“12.34”);
并非所有数据类型都实现parse或tryparse方法。但是,许多类型都有关联的TypeConverter,您可以使用它来尝试从字符串转换
public Boolean Validate<T>(string value)
{
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter != null ? converter.IsValid(value) : false;
}
公共布尔值验证(字符串值)
{
var converter=TypeDescriptor.GetConverter(typeof(T));
返回转换器!=null?转换器.IsValid(值):false;
}
如果您在运行时之前不知道实际类型(通常是在出现此类问题时),您将如何合理地使用这些信息?我想您的意思是,如果您的值参数是StringType,我是否应该检查转换器是否存在?你说很多类型的人。。。不是全部。我添加了一个检查转换器是否存在。与寻找解析方法相比,这种技术应该能够从字符串转换更多类型。另一种技术是使用System.Convert类,但同样,这不会涵盖那么多类型。