¿Qué tan bueno es la inferencia tipo C#? Leí en alguna parte que es solo para variables locales ¿Funciona para los atributos de nivel de clase? Para firmas de métodos? ¿Tipos de devolución de método? etc.¿Qué tan buena es la inferencia tipo C#?
Respuesta
Hay algunas clases principales de la inferencia de tipos en C#:
variables locales Implícitamente proporcionado:
- Sólo para las variables locales
- Sólo cuando el valor se asigna como parte de la declaración
- El valor no puede ser nulo
- valor no puede ser una expresión lambda, método anónimo o grupo método (sin una conversión)
- El tipo de tiempo de compilación del valor se utiliza para el tipo de la variable
- Cualquier usos adicionales de la variable sólo se comprueban contra el tipo determinado por la declaración + asignación inicial; ellos no contribuyen a la inferencia en sí misma.
Inferencia de argumento de tipo de método genérico, es decir, no especifica los argumentos de tipo en una llamada a un método genérico, el compilador los calcula en función de los argumentos.
- sería muy útil tener esto para los tipos genéricos, así como los métodos genéricos
- Realmente útil de todos modos - LINQ sería difícil o imposible de usar sin ella tipos
- anónimos serían bastante inútil sin ella
- reglas realmente complicado, incluso la especificación está mal en algunos lugares
Lambda tipo de parámetro de expresión inferencia
- compilador intenta resolver los tipos de los parámetros para las expresiones lambda en función del contexto en el que se utiliza
- por lo general funciona bastante bien, en mi experiencia
tipo de matriz de inferencia, por ejemplo,
new[] { "Hi", "there" }
en lugar denew string[] { "Hi", "there" }
- Varias pequeñas restricciones, nada importante
Probablemente he olvidado algunas otras características que podrían llamarse "inferencia de tipos". Sospecho que en su mayoría está interesado en el primero, pero los demás también pueden ser relevantes para usted :)
Funciona solo con variables locales, tal como lo entiendo.
Solo se puede usar para variables locales, pero puede detectar el tipo en muchas formas diferentes.
var myVar = SomeMethodThatReturnsInt(); //will know it's an int
var myIntList = new List<int>(); //this works too (although this is technically not type inference)
var myOwnVar = new { Name = "John", Age = 100 }; // will create own type and infer that
EDITAR: Un ejemplo más de Tye Inference es con Lambdas. IE:
var myList = new List<int>();
//add some values to list
int x = myList.Find(i => i == 5); // compiler can infer that i is an int.
- 1. ¿Por qué la inferencia de tipo F # es tan voluble?
- 2. ¿Qué tan portátil es C++?
- 3. Tipo de inferencia en Java (à la C#)
- 4. tipo parcial inferencia
- 5. Inferencia del tipo genérico Pregunta
- 6. ¿Por qué la inferencia tipo Scala falla aquí?
- 7. ¿Por qué la sintaxis de C++ es tan complicada?
- 8. ¿Qué tan útil es C#? ¿operador?
- 9. Problema de tipo Scala (inferencia)?
- 10. ¿Qué tan portátil es GLib?
- 11. Inferencia de tipo GHC infortunios
- 12. ¿Qué tan estable es el lenguaje Groovy?
- 13. ¿Por qué WinAPI es tan diferente de la C "normal"?
- 14. ¿Cuándo la inferencia de tipo Java produce un tipo infinito?
- 15. Inferencia de tipo Scala Tuple en Java
- 16. ¿Qué tan escalable es Jetty?
- 17. ¿Qué tan seguro es PHP?
- 18. Inferencia de tipo de método en la especificación Java
- 19. Inferencia de tipo genérico parcial posible en C#?
- 20. C# Inferencia de argumento de tipo de método genérico
- 21. tipo Scala inferencia con marcador de posición _
- 22. ¿Es esta inferencia tipo Haskell en acción, o algo más?
- 23. En cuanto a rendimiento, ¿qué tan buena es la biblioteca de guayaba?
- 24. ¿Por qué la parte "Dinámica" de los lenguajes dinámicos es tan buena?
- 25. ¿Cuáles son algunas ventajas y desventajas de la inferencia tipo en C#?
- 26. ¿Qué tan grande es la sesión Meteor
- 27. ¿Qué tan seguro es actualizar la base?
- 28. ¿Qué tan ancha es la consola node.js?
- 29. ¿Los VB son tan pequeños como la var de C#?
- 30. (¿Por qué) la reflexión es tan cara en .Net?
¿Por qué el segundo ejemplo no es técnicamente inferencia tipo? –
+1 a Rafa Castaneda. ¿Por qué el segundo ejemplo no es un ejemplo de inferencia de tipo? ciertamente me parece a mí! – TheIronKnuckle