gpt4 book ai didi

c# - 罗列,不失引用

转载 作者:行者123 更新时间:2023-11-30 13:24:31 25 4
gpt4 key购买 nike

面试回来。我与您分享,欢迎提供准确准确的答案。

目的,你有一个静态方法,这个方法接收一个IList<int>你有取回您可以除以 3 的值并生成代码。

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

奖励:如何更改代码以不仅接收 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平台的。

回答您的附加问题:没有简单的方法可以做到这一点。人们可能会认为使用具有类型约束的泛型可以解决这里的问题(类似于 static void CanBeDivedByThree<T>(IList<T> list) where T : struct ),但问题是 C# 还不(还?)支持泛型算术。 C# 没有可以采用“T”和“int”类型的泛型参数的模运算符。

关于c# - 罗列,不失引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com