我们已经阅读或了解了堆栈类,但我们中的许多人可能从未找到使用LIFO对象的理由.我很想知道使用这个对象的现实世界解决方案及其原因.
http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx
我最近看到一个例子,程序员在遍历分层数据源时使用堆栈来跟踪他当前的位置.当他向下移动层次结构时,他将位置标识符推到堆栈上,当他向后移动时,他将物品从堆栈中弹出.我认为这是一种非常有效的方式来跟踪他在乳房等级中的当前位置.我以前从未见过这个.
还有其他人有什么例子吗?
我有一个例子,每次我使用迭代器时我都可以使用它,但它可以在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)