如何使用泛型类型验证变量

本文关键字:变量 验证 泛型类型 何使用 | 更新日期: 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;
}