首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有类似于f#中的通用unbox函数?

是否有类似于f#中的通用unbox函数?
EN

Stack Overflow用户
提问于 2013-10-24 13:53:37
回答 2查看 774关注 0票数 3

我正在尝试使用对象处理程序,我可以很好地将这些东西放入内存中。但是当我再次查找物体时,我会返回:

代码语言:javascript
复制
object(object[,]) 

代码语言:javascript
复制
object(double[,]) 

如何在c#中解压缩?

代码语言:javascript
复制
object(double[,]) boxedobj = ....
double[,] unboxedobj = unbox(boxedobj);

理想情况下,我希望以一种通用的方式这样做,这样无论类型是double[]还是double,还是object,等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-24 14:12:38

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

代码语言:javascript
复制
static R Unbox<R>(object anything) {
  return (R)anything;
}

因此,在使用double[,]的情况下,您需要如下所示:

代码语言:javascript
复制
var array = (double[,])boxed;

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

代码语言:javascript
复制
static R Unbox<R, T>(T anything) {
    return (R)(object)anything;
}
票数 9
EN

Stack Overflow用户

发布于 2013-10-24 13:58:17

除非我忽略了您的观点,否则object之间的转换应该自动为您选择方框/开箱值类型(数组不是值类型,BTW):

代码语言:javascript
复制
double d = 0.0;  // not boxed

object obj = d;  // boxed

double d2 = (double)obj;  // unboxed

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19567978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档