3

我正在尝试使用对象处理程序,并且可以正常工作以将内容放入内存中。但是当我再次查找对象时,我返回:

object(object[,]) 

或者

object(double[,]) 

我如何在 C# 中拆箱?

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

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

4

2 回答 2

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;
}
于 2013-10-24T14:12:38.887 回答
4

除非我错过了您的观点,否则转换为/从object应该自动为您装箱/取消装箱值类型(数组不是值类型,顺便说一句):

double d = 0.0;  // not boxed

object obj = d;  // boxed

double d2 = (double)obj;  // unboxed

更大的问题是 - 你为什么关心它是否装箱?

于 2013-10-24T13:58:17.653 回答