我有一个泛型类,我需要约束只值类型(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
}
}
}
约束吨至struct
不工作,我真的想避免装箱/如果可能的话拆箱。有任何想法吗?
编辑:多给点见识。我注意到在一个库中,我正在开发两个类具有非常相似的属性/方法等,唯一的区别是数据的基础类型(int或float)。这引导我进行泛型设计。唯一的困扰是因为调用特定的Parse方法,这取决于它是float还是int。我可以用拳击/拆箱来解决它,但如果可能的话,我真的很想避免这种情况。
现在我想知道...... CLR是否允许'System.Int32'作为约束?我们可以用Jon Skeet在Unconstrained Melody上使用的相同技巧吗? –
@Martinho:不,你不能。那又有什么意义呢?像MyFunc(T num)这样的方法签名,其中T:int将与“MyFunc(int num)”实际上相同。 –
LukeH
代表解决方案似乎是最简单的。构造函数在库的内部(即用户可以访问创建的对象,但不能创建它们),因此传递额外的参数没有什么大不了的。 –