tengo el siguiente método:¿Cómo obtener el compilador de C# para inferir tipos genéricos?
public TResult Get<TGenericType, TResult>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
En este momento, un usuario de este método tiene que utilizar de esta manera:
//Notice the duplicate int type specification
int number = Get<SomeGenericType<int>, int>();
¿Por qué tengo que especificar TResult en el Defintion método? El compilador ya conoce TResult desde que lo especifiqué en TGenericType. Lo ideal sería que (si el compilador de C# fue un poco más inteligente), mi método sería así:
public TResult Get<TGenericType>()
where TGenericType : SomeGenericType<TResult>
where TResult : IConvertible {
//...code that uses TGenericType...
//...code that sets someValue...
return (TResult) someValue;
}
Así el usuario simplemente puede utilizar de esta manera:
//Much cleaner
int number = Get<SomeGenericType<int>>();
¿Hay una manera de hacerlo ¿lo que quiero hacer?
Creo que eliminar algunos calificadores como * estúpido * de la descripción de la pregunta ayudará. – EFraim
Es el compilador que es estúpido, ¿verdad? ;) Eliminé el comentario extraño. Esta es en realidad una pregunta razonable sin eso. –
Como le respondieron que no hay forma de usar solo algunos de los parámetros de tipo, quizás deba reformular su pregunta en términos de lo que le gustaría lograr. Tal como está, su pregunta es "¿cómo puedo hacer que el código de compilación del compilador C# viole la definición del lenguaje C#?" Como tal, debe ser cerrado como "no es una pregunta real". –