Condiciones genéricas sobre sobrecargas de métodos

Tengo una interfaz con algunos métodos genéricos, y quería implementar un método con sobrecargas para aceptar una instancia de una clase o su valor PK (que es un int o un GUID pero varía).

Agregué métodos similares a estos ejemplos:

    void DoSomething<TKey>(TKey key) where TKey: struct;
    void DoSomething<TModel>(TModel model) where TModel : class;

El nombre del método 'DoSomething' en el segundo de estos se resalta y el error es

Type 'ISomeStuff' ya define un miembro llamado 'DoSomething' con los mismos tipos de parámetros.

Estoy sorprendido por esto, ya que he definido claramente que los parámetros son de diferente tipo: uno es una clase y el otro una estructura.

¿Por qué no es esto suficiente para hacer que las firmas sean diferentes?

Respuestas a la pregunta(4)

Su respuesta a la pregunta