【发布时间】:2013-12-23 21:34:04
【问题描述】:
我最近从 vb.net 切换到 c# 并不断遇到奇怪的事情。
这让我摸不着头脑,但可能很简单,有人能指出我缺少什么吗?
我有一个 IEnumerable 对象,其中包含实体,目前有 3 个实体。
AAA, orange, blue, red
BBB, green, yellow, pink
CCC, orange, pink, red
使用下面的代码,我似乎得到了最后一个元素的代码(三个字母),只有那个,三遍。所以输出将是:
Running Company code: CCC
Running Company code: CCC
Running Company code: CCC
如果我一步一步通过,它会通过每一个,但我认为它以某种方式在 foreach 循环中更改它,然后将其放入控制台。如果我把 console.writeline 放在循环中,那么我会得到预期的结果。
Running Company code: AAA
Running Company code: BBB
Running Company code: CCC
我没有测试过,但我确信这在 VB.Net 中可以正常工作,有人可以解释我缺少什么,毫无疑问它可能就在我面前。
public void lookForWork()
{
var custs = _IRepository.GetCustomers();
var conf = _IRepository.GetConfig();
foreach (var custRow in custs)
{
worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.DoWork += (obj, e) => checkWork(conf.Where(x => x.Code == custRow.Code).SingleOrDefault());
worker.RunWorkerAsync();
}
}
private void checkWork(CustomerConfigEntity custInfo)
{
console.WriteLine(String.Format("Running Company code: {0}", custInfo.Code));
}
【问题讨论】:
-
您没有收到有关“不要在 lambda 中使用迭代变量...”或类似内容的警告吗?
-
不,它运行良好,只是意外输出。