Przeciążanie metod w oparciu o ogólne ograniczenia?

Czy mogę w jakiś sposób przeciążyć metody, które różnią się tylko typem ogólnymograniczenia?

To się nie kompiluje:

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

    }

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

    }

Ponieważ są to metody „otwarte”, rzeczywista metoda powinna być zamknięta / skonstruowana / w pełni zdefiniowana, gdy jest odwołana w innym miejscu w kodzie z konkretnie wpisanymT, a następnie byłoby jasne, które przeciążenie wywołać.

Oczywistym rozwiązaniem jest nie przeciążanie ich, ale zastanawiam się, dlaczego to nie działa w C #?

Dodatkowe pytanie: Jeśli jest to tylko ograniczenie kompilatora C #, czy IL zezwala na takie przeciążenie?

questionAnswers(3)

yourAnswerToTheQuestion