有没有办法让这样的代码工作:
public class Func2<A, B>
{
private Func<A, B> f;
public Func2(Func<A, B> f)
{
this.f = f;
}
public object invoke(object obj, long l)
{
if (typeof(B) == typeof(long))
{
if (obj != null)
l = (long)obj;
return f((B)l); //error! cannot convert type 'long' to 'B'
} else {
return f((B)obj);
}
}
}
这里的问题是我不能直接将 B 转换为 long 而不先将 B 转换为对象。我试图不惜一切代价避免装箱,因为它会减慢功能上的很多快速操作。那么有什么方法可以实现这一点吗?
我知道我实际上可以定义一个专门的 Func2 来专门处理 B 为 long 的情况。但随着函数数量的增长,long 和对象的组合呈指数增长——在实际用例中,我还希望支持双精度数!有没有什么方法可以在没有拳击的情况下支持这一点?也许有不安全的代码?
谢谢!考埃