7

我的函数要求您将一个字符串和一个类型作为 T 传递给它。基于 T 我想将字符串 val 解析为该类型,但我从这个问题的标题中得到了错误。任何有任何见解或其他方法来完成此功能的人,我将不胜感激。

T Parse<T>(string val) where T : System.Object
    {
        TypeCode code = Type.GetTypeCode(typeof(T));
        switch (code)
        {
            case TypeCode.Boolean:
                return System.Boolean.Parse(val);
                break;
            case TypeCode.Int32:
                return Int32.Parse(val);
                break;
            case TypeCode.Double:
                return Double.Parse(val);
                break;
            case TypeCode.String:
                return (string)val;
                break;
        }
        return null;
    }
4

1 回答 1

21

只需删除where T : System.Object.

通过说明:

where T : System.Object

您是说T方法中可用的类型Parse必须从对象继承。
但是,由于 C# 中的每个对象都继承自System.Object您不需要该约束(这可能是编译器不允许这样做的原因之一)。

此外,由于您正在返回null,您应该将类​​型限制T为引用类型,因此:

where T: class

但是通过这种方式,您不能返回布尔值、整数或任何值类型。

但是,您的代码基本上模仿了 的功能Convert.ChangeType,唯一的区别是您使用泛型返回正确的类型而不是对象,但基本上等于:

T Parse<T>(string val)
{
    return (T)Convert.ChangeType(val,typeof(T));
}
于 2012-07-13T17:00:32.987 回答