Tag: stack

如何在C#中删除不在堆栈顶部的堆栈项

不幸的是,一个项目只能通过“pop”从堆栈中删除。 堆栈没有“删除”方法或类似的东西,但我有一个堆栈(是的,我需要一个堆栈!),我需要从中删除一些元素。 有这个诀窍吗?

c#structs / classes stack / heap control?

所以在c ++中它很容易。 你想要在堆上分配任何类/结构,使用new。 如果你想要它在堆栈上,不要使用新的。 在C#中,我们总是使用new关键字,并且根据它是结构还是类,它在堆栈或堆上分配(结构转到堆栈,堆到类) – 在某些应用程序中可以有更改设计时的巨大性能差异,只有那些对象才能进入真正属于那里的堆。 我想知道的是 – 是否有一种直接的方法来控制对象的分配位置,与它是否被声明为struct或class无关? 我知道值类型(结构)可以装箱去堆(但装箱/拆箱会带来性能成本)。 有没有办法在堆栈上分配类? 此外,是否有任何机制来分配原始内存并使用像C ++中的placement new这样的东西? 我知道这打破了被管理的想法 – 但如果你可以使用自定义内存管理,它可以产生很大的性能差异。 我喜欢C#因为它的便利性,因为它是垃圾收集器和其他东西 – 但有时候,当处理应用程序的瓶颈时,可能希望能够更好地控制实际发生的事情。 任何提示/提示欢迎:) 编辑:性能示例: struct Foo1 { public int i; public float f; public double d; } struct Foo2 { public Foo1[] bar; public void Init(){ bar = new Foo1[100]; for (int i = 0; i […]

存储在堆中的对象中的值类型也是如此?

我可以想象这个问题已被问过几千次,但我找不到答案的运气也不多,而且这更多是出于好奇而不是需要。 深入研究C#的基本要素,我想知道,因为对象存储在堆中,堆中存储的对象中的值类型是否也被放置在堆栈中?

如何从C#循环USB设备?

我想在某个事件被触发后循环(模拟拔出并重新插入)USB设备(调制解调器)。 我在codeproject上找到了一个示例: http://www.codeproject.com/KB/system/usbeject.aspx 这允许我识别+通过其非易失性串口弹出设备,但我需要它来回收,而不仅仅是弹出。 我读过这个: http://www.tech-archive.net/Archive/Development/microsoft.public.development.device.drivers/2005-02/1292.html 我不明白。 其他USB相关post中已经提到过: http://www.codeproject.com/KB/system/DriveDetector.aspx 这与我的问题无关。

为什么必须使用非默认构造函数初始化C#struct中的所有字段?

我想试试这段代码: public struct Direction { private int _azimuth; public int Azimuth { get { return _azimuth; } set { _azimuth = value; } } public Direction(int azimuth) { Azimuth = azimuth } } 但它在编译时失败,我理解struct需要初始化它的所有字段。 但我想了解在CLR \ IL引擎盖下发生了什么。 为什么它需要在任何其他方法\ property \ this等之前的所有字段 谢谢。

为什么Stack 和Queue 用数组实现?

我正在Albahari兄弟的Nutshell中阅读C#4.0,我发现了这个: 堆栈在内部实现,其数组根据需要resize ,与Queue和List一样。 (第288页,第4段) 我不禁想知道为什么。 LinkedList提供O(1)头尾插入和删除(这应该适用于堆栈或队列)。 可resize的数组有O(1)缓冲插入(如果我没记错的话),但O(n)最坏的情况(我不确定删除)。 它可能比链表使用更多的空间(对于大型堆栈/队列)。 还有更多吗? 双链表实现的缺点是什么?

JsonConvert.Deserializer索引问题

在C#中使用Stack集合时遇到了以下问题。 确切地说,我不确定为什么会这样。 请详细说明解决方案的原因和替代方案。 问题 – 具有Stack作为属性的类。 例如,将类命名为Progress。 T是类型Item。 现在,只要用户取得任何进展,我们将以堆栈forms存储。 如果用户介于两者之间,那么下次我们将从堆栈中查看项目,以便从该阶段开始。 下面的代码片段将介绍正在尝试的内容…… using static System.Console; using System.Collections.Generic; using Newtonsoft.Json; namespace StackCollection { class Program { static void Main(string[] args) { Progress progress = new Progress(); progress.Items.Push(new Item { PlanID = null, PlanName = “Plan A” }); var jsonString = JsonConvert.SerializeObject(progress); var temp = JsonConvert.DeserializeObject(jsonString); temp.Items.Push(new Item […]

可观察的堆栈和队列

我正在寻找Stack和Queue的INotifyCollectionChanged实现。 我可以自己动手,但我不想重新发明轮子。