C# no requiere que especifique un parámetro de tipo genérico si el compilador puede inferir que, por ejemplo:¿Por qué C no admite tipos genéricos implícitos en los constructores de clases?
List<int> myInts = new List<int> {0,1,1,
2,3,5,8,13,21,34,55,89,144,233,377,
610,987,1597,2584,4181,6765};
//this statement is clunky
List<string> myStrings = myInts.
Select<int,string>(i => i.ToString()).
ToList<string>();
//the type is inferred from the lambda expression
//the compiler knows that it's taking an int and
//returning a string
List<string> myStrings = myInts.
Select(i => i.ToString()).
ToList();
Esto es necesario para los tipos anónimos en los que no se sabe lo que sería el parámetro de tipo (en intellisense aparece como 'a
) porque es agregado por el compilador. los parámetros de tipo
de nivel de clase no le permiten hacer esto:
//sample generic class
public class GenericDemo<T>
{
public GenericDemo (T value)
{
GenericTypedProperty = value;
}
public T GenericTypedProperty {get; set;}
}
//why can't I do:
int anIntValue = 4181;
var item = new GenericDemo(anIntValue); //type inference fails
//however I can create a wrapper like this:
public static GenericDemo<T> Create<T> (T value)
{
return new GenericDemo<T> (value);
}
//then this works - type inference on the method compiles
var item = Create(anIntValue);
¿Por qué no C# soportar este nivel de clase de tipo genérico inferencia?
¿Por qué esta pregunta tiene un voto para cerrar contra ella como un duplicado de [¿Por qué el constructor de C no puede inferir el tipo?] (http://stackoverflow.com/questions/3570167) cuando esa pregunta es dos años más reciente? Seguramente ese es el duplicado? – Keith
Creo que la otra pregunta es más concisa y tiene una mejor respuesta. – Sam
@Sam - sí, la respuesta de Eric Lippert a esa pregunta es autoritativa, pero no creo que ninguna de las dos preguntas deba cerrarse. – Keith