En términos de productividad del codificador, ¿cuál es la forma más rápida en VS 2005 o 2008 para determinar si Foo implementa IDisposable? Me ha pasado en más de una ocasión que me atraparon usando un tipo sin un bloque using
porque nunca se me ocurrió que la cosa necesitaría implementar IDisposable.al codificar cuál es la forma más rápida de determinar si un tipo es IDisposable
Respuesta
ponerlo en una instrucción using y ver si se compila:
using (var x = new TypeInQuestion(params)) {}
Esto no se compilará si el TypeInQuestion
no implementa IDisposable.
La otra manera más rápida es usar ReSharper, haga clic en la variable (x
en este caso), y vea si tiene una sugerencia para ponerla en una declaración de uso.
Lamentablemente, no existe una forma "simple, simple y simple".
Vas a tener que presionar F12 en el nombre de la clase, y luego seguir presionando F12 en las clases base hasta que estés en la clase base, si alguno de ellos implementa IDisposable, ya lo tienes.
Gracias --- eso es lo que hago actualmente, lo que provocó la pregunta, porque realmente debería haber una mejor manera. –
+1 para el acceso directo No sabía acerca de – cjk
Si el tipo está relacionado con IO, ventanas/controles o gráficos, generalmente lo tomo como una pista de que debería estar buscando un método de eliminación.
Además, la presencia de un método 'Cerrar' puede implicar que el tipo es desechable, por ejemplo, si tiene una referencia a un XmlReader (que es IDisposable) no puede ver el método Dispose porque está implementado explícitamente.
Si tiene ReSharper, resalte la variable, espere la bombilla y luego presione Alt + Intro. Si una de las opciones es "Ajustar con 'usando'", es IDisposable.
Al hacer la gestión de clases, realmente no es mucho mejor que ReSharper y tiene un punto de entrada de precio barato. – CAbbott
CodeRush tiene esto también. El acceso directo es CTRL + 'en mi sistema. –
Además, acabo de enterarme de que CodeRush marcará que este es un problema con el subrayado cursivo naranja. –
La forma más rápida para mí es generalmente escribir un bloque de uso (con fragmentos de código) para una instancia del tipo en cuyo caso recibirá una notificación de error si el tipo no implementa IDisposable. Eso generalmente toma solo un par de segundos. No muy conveniente, pero bastante rápido.
En los IDE más recientes, si tengo alguna pregunta de si algo implementa IDisposible, lo puse en un bloque de uso. El IDE le dirá si eso es incorrecto antes de que haya terminado con la siguiente línea de código.
tipificación de inicio y ver si IntelliSense recoge un método .Dispose
(según los comentarios, es rápido y (muy) sucio)
No funcionará si el tipo implementa IDisposable explictly (necesitaría lanzar primero). – Richard
No funcionará el 100% del tiempo, pero es un control rápido y sucio; también supone que el autor no agregó un método de eliminación sin implementar IDisposable. –
Usted puede hacer esto en PowerShell, por ejemplo,
[System.Management.Automation.Runspaces.pipeline].getinterface("IDisposable")
vuelve
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False IDisposable
mientras
[datetime].getinterface("IDisposable")
vuelve nada.
No es útil para tipos personalizados no cargados en Powershell. –
Lo suficientemente fácil como para agregar tipos personalizados a PowerShell: '[Reflection.Assembly] :: Load (...)'. – Richard
Con el plug-in ReSharper instalado en Visual Studio, cuando usted tiene su cursor en una declaración de variables como el StringWriter en el siguiente fragmento:
TextWriter writer = new StringWriter();
writer.WriteLine("Test");
puede seleccionar "poner en 'utilizar' construir" de la menú 'bombilla', que a su vez, el fragmento anterior en:
using (TextWriter writer = new StringWriter()) {
writer.WriteLine("Test");
}
Si la opción de "poner en ..." no está allí, el tipo no implementa IDisposable.
No es rápido de hacer, pero también puede ejecutar FXCop, y lo alertará de objetos que son IDisposable que no están en un bloque using().
Trabajando en algún código heredado de C# aquí en el trabajo, encontré que quien lo escribió originalmente hizo un método ".Dispose()" en casi todas las clases, incluso si no es necesario, pero las clases no implementan IDisposable . Lo que significa que en inteligencia todos tienen un método Dispose(), pero no pueden colocarse usando() bloques ... ¡muy molestos!
- 1. ¿Cuál es la forma más rápida de probar si un objeto es IEnumerable?
- 2. ¿Cuál es la forma más rápida de grabar varios archivos?
- 3. ¿La forma más rápida de verificar si un tipo es blittable?
- 4. ¿Cuál es la forma más pitonica de determinar endianness?
- 5. ¿Cuál es la forma más rápida de comparar dos mapas de bits de igual tamaño para determinar si son idénticos?
- 6. ¿Cuál es la manera más rápida de determinar si existe una fila usando Linq a SQL?
- 7. ¿Cuál es la forma más rápida de recorrer un objeto Excel Range al revés?
- 8. ¿Cómo determinar si un tipo es un tipo de colección?
- 9. ¿Cuál es la forma más corta/más idiomática de determinar si una variable es cualquiera de una lista de valores?
- 10. ¿Cuál es la forma más rápida de saltar a un constructor (es) en una clase?
- 11. ¿Cuál es la forma de determinar si un Int es un cuadrado perfecto en Haskell?
- 12. ¿Cuál es la forma más rápida de verificar si dos números dados son coprime?
- 13. ¿Cuál es la forma más rápida de verificar si dos Tbitmaps son iguales?
- 14. ¿Cuál es la forma más rápida de acceder al código nativo desde Java?
- 15. ¿Forma rápida de determinar si existe un PID en (Windows)?
- 16. ¿Cuál es la forma más rápida de enviar una cadena al sistema?
- 17. ¿Cuál es la forma más segura de determinar si 2 URL son iguales?
- 18. Determinar si un tipo es un tipo anónimo
- 19. ¿Cuál de las dos formas de codificar una unión interna es más rápida?
- 20. ¿Cuál es la forma más eficiente de determinar si un gráfico dirigido está conectado de forma individual?
- 21. ¿Cuál es la forma más rápida de un verdadero sinatra (ruby/rack) after_filter?
- 22. ¿Cuál es la forma más rápida de obtener un código de estado de URL usando HttpClient
- 23. ¿Cuál es la mejor y más rápida forma de verificar si la imagen es válida en PHP?
- 24. ¿Cuál es la forma más rápida de calcular la potencia grande de 2 módulo un número
- 25. La forma más rápida y eficiente para determinar el valor decimal es entero en Java
- 26. cuál es la forma más rápida de obtener el submapa de un mapa
- 27. ¿Cuál es la forma más rápida de cargar un gran archivo CSV en los datos centrales
- 28. ¿La llamada rápida es realmente más rápida?
- 29. ¿Cuál es la forma más rápida de comparar matrices de dos bytes?
- 30. ¿Cuál es la forma más rápida de calcular un cierre épsilon?
Motivo de baja votación, por favor? No puedo mejorar si no sé cuál fue el problema. –