Generic types in C# are not C++ templates; remember, a generic type must work for all possible type arguments. A template need only work for the constructions you actually make.
This question is a duplicate; see my answer to
for more thoughts on this. Basically, the short answer is that the considerable costs do not outweigh the small benefits of the feature. If you don’t like that answer, see my second answer:
And if you don’t like that answer either, see the follow-up question: