C# · 12月 27, 2021

c# – “yield关键字”在迭代器块之外是否有用?

yield关键字文档说:

The yield keyword signals to the compiler that the method in which it
appears is an iterator block.

我在任何迭代器块之外遇到了使用yield关键字的代码.这应该被认为是编程错误还是罚款?

编辑对不起,忘记发表我的代码:

int yield = prevIoUsVal/actualVal;return yield; // Should this be allowed!!!???

谢谢.

解决方法 在迭代器块之外使用收益是好的 – 它只是意味着它不被用作上下文关键字.

例如:

// No idea whether this is financially correct,but imagine it is :)decimal yield = amountReturned / amountInvested;

在这一点上,它不是一个上下文关键字(它从来不是一个“完整”关键字),它只是一个标识符.除非在清晰度方面显然是最佳选择,否则我会尽量避免使用它,但有时可能会这样做.

您只能将其用作产量返回和收益率中断的上下文关键字,这仅在迭代器块中才有效. (他们将一种方法转化为迭代器.)

编辑:回答你的“应该允许”的问题…是的,应该.否则,当C#2被释放时,使用yield作为标识符的所有现有C#1代码将变得无效.它应该小心使用,而C#团队确保它从来没有实际上是模糊的,但它是有道理的.

许多其他上下文关键字也是如此 – “从”,“选择”,“在哪里”等你想阻止那些从来不是标识符?