以下是代码的测试样本 [...]
public IEnumerable<B> GetList(A obj)
{
Parallel.ForEach(obj.yTest.Keys, key =>
{
switch (key)
{
case "1":
yield return new B() {Name = obj.yTest[key]};
break;
case "2":
yield return new B() {Name = obj.yTest[key]};
break;
case "3":
yield return new B() {Name = obj.yTest[key]};
break;
case "4":
yield return new B() {Name = obj.yTest[key]};
break;
}
});
}
}
class B
{
public string Name { get; set; }
}
错误: &#34;只有方法,运营商和访问者才能包含“产量”和“产出”。语句&#34;
答案 0 :(得分:3)
你不能在这样的lambda中使用yield
。不过,您可以使用PLINQ选择语句替换Parallel.ForEach
。
public IEnumerable<B> GetList(A obj)
{
return obj.yTest.Keys.AsParallel().Select(key =>
{
switch (key)
{
case "1":
return new B() {Name = obj.yTest[key]};
break;
case "2":
return new B() {Name = obj.yTest[key]};
break;
case "3":
return new B() {Name = obj.yTest[key]};
break;
case "4":
return new B() {Name = obj.yTest[key]};
break;
default:
return new B() {Name = obj.yTest[key]};
break;
}
});
}
这将为您提供IEnumerable
的并行选择以及您从yield return
获得的延迟执行。