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#团队确保它从来没有实际上是模糊的,但它是有道理的.
许多其他上下文关键字也是如此 – “从”,“选择”,“在哪里”等你想阻止那些从来不是标识符?