And here I thought it was because:
1. repeating the same function definition and type declarations over and over varying only one type parameter and the name was a great way to introduce bugs if one of the functions was missed in updating.
2. working with reflection is slow and complex and easy to get wrong
Both of which are solved with something simple like generics.