Its optional, not madatory is exactly what is wrong. If its optional it means that someone could/will use it, which means everyone now needs to know how to code things in yet another way. This results in an unecessary learning curve, taking time, delaying projects and costing money. It means non-standard code everywhere.
If you have one way of doing it (i.e. mandatory) you prevent this happening, saving money, speeding up development.
This might be nice for hobbists or very small teams, but for enterprise programming, this is a nightmare.
In my opinion, LINQ and Lambda should never have been added, as they weren't needed and just make code more unreadable.
The whole aim of a successful development language is to make it maintainable. To do this you have to have readable syntax and repeatable ways of doing things (one way of doing something). However C# seems to be deliberately going in the other direction by introducing yet more ways of doing something that can already be done and inventing new code syntax, making code less readable.
Adding new features to a language is good, but do not add features that effectively already exist. Adding yet another way of doing something means more complication and more problems understanding and maintaining code.
Simplicity and standardisation should be the aim, not complexity and ambiguity.