【问题标题】:Constraint cannot be special class 'System.Object'约束不能是特殊类“System.Object”
【发布时间】:2012-07-13 16:57:23
【问题描述】:

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

【问题讨论】:

标签: c#-2.0


【解决方案1】:

只需删除where T : System.Object

通过说明:

where T : System.Object

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

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

where T: class

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

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

T Parse<T>(string val)
{
    return (T)Convert.ChangeType(val,typeof(T));
}

【讨论】:

  • 搜索了其他内容,但发现此响应解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多