Do we know the exact reasons why this is allowed?
Yes. yield- This is just a contextual keyword. It was introduced in C # 2, and the team did not want to break the code that it already used yieldas an identifier.
The same is true for other contextual keywords that were entered with 1.0, for example partial. See Eric Lippert's blog post for a complete list.
, ? , , , . :
private int _;
private string __;
? , , yield ?