约束不能是特殊类'System.Object'

时间:2012-07-13 16:57:23

标签: c#-2.0

我的函数要求你传递一个字符串和一个类型为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;
    }

1 个答案:

答案 0 :(得分:16)

只需删除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));
}