Methodenüberladung basierend auf generischen Einschränkungen?

Kann ich irgendwie Methoden überladen haben, die sich nur nach generischem Typ unterscheidenEinschränkungen?

Dies kompiliert nicht:

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

    }

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

    }

Da es sich um "offene" Methoden handelt, sollte die eigentliche Methode geschlossen / konstruiert / vollständig definiert werden, wenn sie an einer anderen Stelle im Code mit einer konkreten Typisierung referenziert wirdT, und dann wäre klar, welche Überladung aufzurufen ist.

Die offensichtliche Lösung besteht darin, sie nicht zu überladen, aber ich frage mich, warum dies in C # nicht funktioniert.

Zusätzliche Frage: Wenn dies nur eine C # -Compiler-Einschränkung ist, lässt die IL eine solche Überladung zu?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage