c# - una - DebuggerDisplay en la clase genérica
la depuración de scripts de chrome en visual studio está habilitada (3)
Tengo un problema al aplicar el atributo DebuggerDisplay
en una clase genérica:
[DebuggerDisplay("--foo--")]
class Foo
{
}
[DebuggerDisplay("Bar: {t}")]
class Bar<T>
{
public T t;
}
Al inspeccionar un objeto de tipo Bar<Foo>
esperaría que se muestre como Bar: --foo--
, pero obtengo Bar: {Foo}
¿Qué estoy haciendo mal?
El atributo DebuggerDisplay no es recursivo. El {} dentro de la cadena básicamente dice evaluar esta expresión y mostrar el resultado en línea. La cadena para el resultado interno se calcula como si no hubiera un atributo DebuggerDisplay en juego para tipo o miembro. Es por eso que ves {Foo} en lugar de --foo--.
La razón de esto es la fiabilidad. Es demasiado fácil tener etiquetas de atributos DebuggerDisplay mutuamente recursivas. Esto causaría un desbordamiento de pila o un bucle infinito al evaluar una expresión interna. La evaluación no recursiva del atributo DebuggerDisplay evita esta recursión infinita (aunque todavía es bastante posible que el usuario la cree ellos mismos dentro de una expresión particular).
Una forma de controlar la forma en que se muestra la expresión interna es anulando el método .ToString (). Esto se evaluará al calcular la cadena de visualización para una expresión interna.
Puede usar [DebuggerDisplay("Bar<{typeof(T).Name}>,nq}")]//nq - no quotes
.
También puede usar estas prácticas: DebuggerDisplay, mejores prácticas de atributos