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

nik*_*nik 3 c# f# unboxing

我试图使用对象处理程序,我有这个工作正常,把东西放在内存中.但当我再次查看对象时,我会回复:

object(object[,]) 
Run Code Online (Sandbox Code Playgroud)

要么

object(double[,]) 
Run Code Online (Sandbox Code Playgroud)

如何在c#中取消装箱?

object(double[,]) boxedobj = ....
double[,] unboxedobj = unbox(boxedobj);
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*cek 9

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

static R Unbox<R>(object anything) {
  return (R)anything;
}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下double[,]你需要这样的东西:

var array = (double[,])boxed;
Run Code Online (Sandbox Code Playgroud)

在大多数情况下unbox<'R> anything,只会转换为使用铸造(R)anything.其中,但这唯一的情况下无法正常工作是当你在另一个通用的方法,你是两个通用类型间铸造.在这种情况下,您需要先转到object(以确保该值已装箱):

static R Unbox<R, T>(T anything) {
    return (R)(object)anything;
}
Run Code Online (Sandbox Code Playgroud)