是否有类似f#的通用unbox功能?

时间:2013-10-24 13:53:38

标签: c# f# unboxing

我正在尝试使用对象处理程序,我将此工作正常,以便将内容放入内存中。但当我再次查看对象时,我会回来:

object(object[,]) 

object(double[,]) 

如何在c#中取消装箱?

object(double[,]) boxedobj = ....
double[,] unboxedobj = unbox(boxedobj);

理想情况下,我想以通用方式执行此操作,以便无论tybe是double []还是double [,]或object [,]等都无关紧要

2 个答案:

答案 0 :(得分:9)

F#unbox函数几乎只是对您指定的任何其他类型进行强制转换。在C#中,这可以这样写:

static R Unbox<R>(object anything) {
  return (R)anything;
}

因此,在您使用double[,]的情况下,您需要以下内容:

var array = (double[,])boxed;

在大多数情况下,unbox<'R> anything只会转换为使用(R)anything进行投射。 工作的唯一情况是,当您使用另一种泛型方法并且在两种泛型类型之间进行转换时。在这种情况下,您需要先转到object(以确保该值已装箱):

static R Unbox<R, T>(T anything) {
    return (R)(object)anything;
}

答案 1 :(得分:4)

除非我错过了你的观点,否则向{/ 1}}进行转换会自动为你打包/取消包装值类型(数组不是值类型,BTW):

object

更大的问题是 - 如果盒装或不装盒,为什么关心