Duplicar posibles:
Generic constraints, where T : struct and where T : classIncapacidad para sobrecargar métodos genéricos con restricciones de tipo
¿Hay alguna razón en particular que no se puede sobrecargar métodos genéricos usando restricciones de tipo mutuamente excluyentes en C#? Por ejemplo, tomemos estos métodos:
T DoSomething<T>(T arg) where T : class
{ /* Do something */ }
T DoSomething<T>(T arg) where T : struct
{ /* Do something */ }
y tratan de invocarlos con
DoSomething("1");
DoSomething(1);
La forma en que lo veo, la HacerAlgo() métodos son excluyentes entre sí en cuanto a los parámetros que van a tomar - el primero toma un tipo de referencia, el segundo toma un tipo de valor. El compilador debería poder decir que la llamada DoSomething con un argumento de cadena va al primer método y la llamada DoSomething con un argumento int va al segundo método.
¿Me falta algo conceptual con los genéricos aquí? ¿O es solo una característica que no se implementó en C#?
Este texto duplicado podría mejorarse mediante la adición de un enlace a la respuesta duplicado. Es realmente frustrante si no puede encontrar una solución y la búsqueda no arroja ningún resultado, o mucho, demasiados resultados. –