Every language has its negatives. English its awkward spelling; French its impossible-to-acquire “chanson”; and Japanese its multiple alphabets.
And C#? What about it? It has no preprocessor macros! And unlike the natural languages, C# lacks the excuse of having acquired this flaw by accident. Designed with guidance from ancestor languages – C, Java, FORTRAN, C# corrected their flaws in many areas.
But as is often the case with remakes – think Psycho and Breathless – the baby gets thrown out with the bath water. In this case the designers of C# wanted to avoid the bad coding practices of preprocessor macros … by eliminating them altogether!
Yup, what Hutus did to the Tutsis, the CUP (Turks) to Armenians, the Nazis to Jews, Mao to free-thinkers and so on, that was the solution the C# designers came up with. The final solution. That is so 20th century.
So now we have our Microsoft apps packed with long-winded, hard-to-read monstrosities like this:
public short ContactMethodTypeId
if (_contactMethodTypeId != value)
//_oldcontactmethodtypeid = _contactMethodTypeId;
_contactMethodTypeId = value;
In previous generations we could have just replaced all those lines with something as short as “qprop ContactMethodtypeId”.
Faster development. Easier maintenance.