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

c# – 列出,不要丢失参考

发布时间:2020-12-16 00:14:47 所属栏目:百科 来源:网络整理
导读:从采访回来.我与您分享,欢迎提供一个好的,准确的答案. 目的,你有一个静态方法,这个方法接收一个IList int你有 找回你可以减去3的值并制作代码. 约束: 原始列表(在主中)有一个堆栈上的引用和堆上的值, 结果必须在与原始列表相同的空间(在堆上)返回(它是一个v
从采访回来.我与您分享,欢迎提供一个好的,准确的答案.

目的,你有一个静态方法,这个方法接收一个IList< int>你有
找回你可以减去3的值并制作代码.

约束:
原始列表(在主中)有一个堆栈上的引用和堆上的值,
结果必须在与原始列表相同的空间(在堆上)返回(它是一个void方法).此处显示的解决方案不正确,因为在方法中有一个新指针
在堆栈堆上创建在方法域中.方案?

额外奖励:如何更改代码以接收int而不是float,double,….

static void Main(string[] args)
    {
        IList<int> list = new List<int>() { 9,3,10,6,14,16,20};
        CanBeDivedByThree(list);
    }

    static void CanBeDivedByThree(IList<int> list)
    {
        list = (from p in list
                where p % 3 == 0
                orderby p descending
                select p).ToList<int>();
    }

解决方法

这是毫无意义的,因为IList的内部存储不在您的控制之下.添加(或可能删除)项可能会重新分配内部数据结构.

它特别没有意义,因为示例中的列表包含在您访问它们时无论如何都要复制的值类型.

最后但并非最不重要的是,它基本上是使用托管语言的全部要点,您不必担心内存(al)位置.这样的东西是implementation details的平台.

接受你的奖金问题:没有简单的方法来实现这一目标.可以认为使用具有类型约束的泛型将解决这里的问题(类似于静态void CanBeDivedByThree< T>(IList< T> list),其中T:struct),但问题是C#没有(还有?)支持通用算术. C#没有模运算符,可以采用类型为’T’和’int’的泛型参数.

(编辑:李大同)

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

    推荐文章
      热点阅读