小编Jer*_*uel的帖子

您使用过"堆栈"对象(.Net)的真实世界用途

我们已经阅读或了解了堆栈类,但我们中的许多人可能从未找到使用LIFO对象的理由.我很想知道使用这个对象的现实世界解决方案及其原因.

http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx

我最近看到一个例子,程序员在遍历分层数据源时使用堆栈来跟踪他当前的位置.当他向下移动层次结构时,他将位置标识符推到堆栈上,当他向后移动时,他将物品从堆栈中弹出.我认为这是一种非常有效的方式来跟踪他在乳房等级中的当前位置.我以前从未见过这个.

还有其他人有什么例子吗?

language-agnostic algorithm data-structures

10
推荐指数
3
解决办法
2542
查看次数

为什么迭代器(.Net)在此代码中不可靠

我有一个例子,每次我使用迭代器时我都可以使用它,但它可以在for循环中正常工作.所有代码都使用执行方法的本地变量.我很难过.有一个关于迭代器的事实我不知道,或者.Net中有一个诚实的善良错误.我打赌前者.请帮助.

此代码每次都可靠地工作.它一次一个地循环(假设10)所有元素并启动一个新线程,将整数作为方法中的参数传递给新线程.它启动10个线程,每个项目一个.1,2,3,4,5,6,7,8,9,10 - 这总是有效的.

工作代码:

//lstDMSID is a populated List<int> with 10 elements.
for(int i=0; i<lstDMSID.Count; i++) 
{
    int dmsId = lstDMSID[i];
    ThreadStart ts = delegate
    {
        // Perform some isolated work with the integer
        DoThreadWork(dmsId);  
    };
    Thread thr = new Thread(ts);
    thr.Name = dmsId.ToString();
    thr.Start();
 }
Run Code Online (Sandbox Code Playgroud)

而这段代码实际上重复了元素.它一次迭代(比如说10)所有元素并开始一个新线程.它启动10个线程,但它不能可靠地获得所有10个整数.我看到它开始1,2,3,3,6,7,7,8,9,10.我正在失去数字.

忙碌的代码:

//lstDMSID is a populated List<int> with 10 elements.
foreach(int dmsId in lstDMSID) 
{
    ThreadStart ts = delegate
    {
        // Perform some isolated work with the integer
         DoThreadWork(dmsId);
    };
    Thread thr = …
Run Code Online (Sandbox Code Playgroud)

.net c#

7
推荐指数
1
解决办法
182
查看次数

标签 统计

.net ×1

algorithm ×1

c# ×1

data-structures ×1

language-agnostic ×1