列表,不要丢失参考

Kri*_*s-I 3 .net c#

从采访回来.我与您分享,欢迎提供一个好的,准确的答案.

目的,你有一个静态方法,这个方法接收IList<int>你必须得到你可以分为3的值并制作代码.

约束:原始列表(在main中)有一个堆栈上的引用和堆上的值,结果必须在与原始列表相同的空间(在堆上)中返回(它是一个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>();
    }
Run Code Online (Sandbox Code Playgroud)

Dir*_*mar 8

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

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

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

接受你的奖金问题:没有简单的方法来实现这一目标.有人可能会认为使用具有类型约束的泛型可以解决这里的问题(类似static void CanBeDivedByThree<T>(IList<T> list) where T : struct),但问题是C#不支持通用算法.C#没有模运算符,可以采用类型为'T'和'int'的泛型参数.

  • @ Kris-I:这些问题是恕我直言,通过解释为什么它们没有意义得到最好的回答. (2认同)