我正在尝试使用对象处理程序,我将此工作正常,以便将内容放入内存中。但当我再次查看对象时,我会回来:
object(object[,])
或
object(double[,])
如何在c#中取消装箱?
object(double[,]) boxedobj = ....
double[,] unboxedobj = unbox(boxedobj);
理想情况下,我想以通用方式执行此操作,以便无论tybe是double []还是double [,]或object [,]等都无关紧要
答案 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
更大的问题是 - 如果盒装或不装盒,为什么关心?