加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:09:49 所属栏目:百科 来源:网络整理
导读:我试图使用对象处理程序,我有这个工作正常,把东西放在内存中.但当我再次查看对象时,我会回复: object(object[,]) 要么 object(double[,]) 如何在c#中取消装箱? object(double[,]) boxedobj = ....double[,] unboxedobj = unbox(boxedobj); 理想情况下,我想
我试图使用对象处理程序,我有这个工作正常,把东西放在内存中.但当我再次查看对象时,我会回复:

object(object[,])

要么

object(double[,])

如何在c#中取消装箱?

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

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

解决方法

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

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

所以在你的情况下使用double [,]你需要类似的东西:

var array = (double[,])boxed;

在大多数情况下,unbox< R>任何东西都会转换为使用(R)任何东西进行投射.唯一不适用的情况是当你在另一个泛型方法中并且你在两个泛型类型之间进行转换时.在这种情况下,您需要首先转到对象(以确保该值被装箱):

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读