我有一个泛型类,我需要将其限制为仅值类型(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);
}
它的优点是可以使用带有类型转换器的任何类型(或者您可以在运行时添加自己的类型)。它确实有拳击,但实际上,it isn't so bad .如果那是您最大的问题,那么您就以错误的方式解决了这个问题。
关于c# - 将值类型转换为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031010/