Sobrecarga de método baseada em restrições genéricas?

Posso de alguma forma ter métodos sobrecarregados que diferem apenas pelo tipo genéricoconstrangimentos?

Isso não compila:

    void Foo<T>(T bar) where T : class
    {

    }

    void Foo<T>(T bar) where T : struct
    {

    }

Como esses são métodos "abertos", o método real deve ser fechado / construído / totalmente definido quando é referenciado em outro lugar no código com um código digitado.T, e então ficaria claro qual sobrecarga chamar.

A solução óbvia é não sobrecarregá-los, mas eu estou querendo saber porque isso não funciona em c #?

Pergunta adicional: Se esta é apenas uma restrição de compilador C #, o IL permite tal sobrecarga?

questionAnswers(3)

yourAnswerToTheQuestion