如何使用Generic Type验证变量

时间:2014-10-06 17:16:33

标签: c#

我有以下内容来验证类型:

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?

2 个答案:

答案 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;
}