从采访回来.我与您分享,欢迎提供一个好的,准确的答案.
目的,你有一个静态方法,这个方法接收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)
这是毫无意义的,因为内部存储IList
不受您的控制.添加(或可能删除)项可能会重新分配内部数据结构.
它特别没有意义,因为示例中的列表包含在您访问它们时无论如何都要复制的值类型.
最后但并非最不重要的是,它基本上是使用托管语言的全部要点,您不必担心内存(al)位置.这些东西是平台的实现细节.
接受你的奖金问题:没有简单的方法来实现这一目标.有人可能会认为使用具有类型约束的泛型可以解决这里的问题(类似static void CanBeDivedByThree<T>(IList<T> list) where T : struct
),但问题是C#不支持通用算法.C#没有模运算符,可以采用类型为'T'和'int'的泛型参数.