Por que o C # não faz inferência de tipo "simples" em genéricos?

Apenas curioso: claro, todos sabemos que o caso geral de inferência de tipo para genéricos é indecidível. Portanto, o C # não fará nenhum tipo de sub-digitação: seFoo <T> é genéricoFoo <int> não é um subtipo deFoo <T>ouFoo <Objeto> ou de qualquer outra coisa que você possa preparar. E claro, todos nós resolvemos isso com uma interface feia ou definições de classe abstrata.

Mas ... se você não consegue superar o problema geral, por que não limitar a solução a casos fáceis? Por exemplo, na minha lista acima, é óbvio queFoo <int> é um subtipo deFoo <T> e seria trivial verificar. O mesmo para verificação contraFoo <Objeto>.

Então, existe algum outro horror profundo que surgiria do abismo se eles dissessem: ah, nossa, vamos fazer o que podemos? Ou isso é apenas algum tipo de pureza religiosa por parte da equipe de idiomas da Microsoft?

Atualizar:

Este é um tópico muito antigo. Atualmente, o C # tem var, que resolve metade do que eu reclamei e, em seguida, usando o estilo Linq de delegados anônimos, possui uma notação excelente por não precisar digitar o mesmo material duas vezes. Portanto, todos os aspectos dos quais eu estava objetando foram resolvidos por alterações mais recentes no C # (ou talvez demorei um pouco para aprender sobre as coisas que estavam sendo introduzidas quando publiquei o tópico ...) Eu uso esses novos agora no sistema Isis2 para computação em nuvem confiável (isis2.codeplex.com) e acho que a biblioteca tem uma aparência muito limpa como resultado. Confira e deixe-me saber o que você pensa). - Ken Birman (julho de 2014)

questionAnswers(6)

yourAnswerToTheQuestion