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