我有一个泛型类,我需要将其限制为仅值类型(int、float 等)。我有一个基于类型测试调用 Parse 方法的方法。例如:
class MyClass<T>
{
...
private static T ParseEntry(string entry)
{
if(typeof(T) == typeof(float))
{
return (T) float.Parse(entry);
}
if(typeof(T) == typeof(int))
{
.... you get the idea
}
}
}
将 T 约束为struct
不起作用,我真的想尽可能避免装箱/拆箱。有任何想法吗?
编辑:为了对此有更多的了解。我注意到在我正在开发的库中,两个类具有非常相似的属性/方法等。唯一的区别是数据的基础类型(int 或 float)。这导致我进行了泛型设计。唯一的问题是调用特定的 Parse 方法,具体取决于它是 float 还是 int。我可以通过装箱/拆箱来解决这个问题,但如果可能的话,我真的想避免这种情况。
private static T ParseEntry(string entry)
{
TypeConverter conv = TypeDescriptor.GetConverter(typeof(T));
return (T) conv.ConvertFromString(entry);
}
其优点是可以使用类型转换器处理任何类型(或者您可以在运行时添加自己的类型)。它确实有拳击,但实际上,还不错 http://msmvps.com/blogs/jon_skeet/archive/2008/10/08/why-boxing-doesn-t-keep-me-awake-at-nights.aspx。如果这是你最大的问题,那么你处理问题的方式就是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)