Note that C# famously broke backwards compatibility when it added generics. I say &quot;famously&quot; because it opted <i>not</i> to follow Java&#x27;s type-erasure approach (which was chosen so as to explicitly <i>maintain</i> backwards compatibility), and history seems to agree that the minor amount of pain back then was well worth the improvements that it brought to the language (especially relative to Java).