visual ver studio scripts habilitada está depurar depuración debuggear debug consola como code chrome c# .net visual-studio-debugging

c# - ver - la depuración de scripts de chrome en visual studio está habilitada



Valor de la propiedad de "base" en el depurador (3)

Estoy depurando el siguiente código:

class A { public virtual string X => "A"; } class B : A { public bool OwnX { get; set; } = true; public override string X => OwnX ? "B" : base.X; // (o) } class Program { static void Main() => Console.WriteLine(new B().X); }

Y tengo un punto de interrupción en la línea marcada con (o) . Cuando llega el punto de interrupción, estoy tratando de evaluar base.X y obteniendo su valor "B" :

La pregunta es: ¿por qué no "A" ?


Este es un error de Roslyn

Como otros han mencionado, este error es github.com/dotnet/roslyn/issues/3723 .

Puede comprobar de forma trivial que el valor real de base.X es A , es solo el Evaluador de expresiones el que devuelve el resultado incorrecto:


¿Quizás debería leer un poco más sobre esto ?: Operador https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/operators/conditional-operator

Dado que el valor predeterminado OwnX es verdadero.

Dale una oportunidad a este código:

B b = new B(); b.OwnX = false; Console.WriteLine(b.X);

Explicando este código: cadena de anulación pública X => OwnX? "B": base.X;

Para hacerlo más legible:

public override string X { get { if (Ownx == true) // this is the default value. { return "B"; } else{ return "A"; } }


Debido a que X no se evalúa en tiempo de ejecución, tampoco se evaluará en el depurador. Entonces asume que es lo mismo.

Debido a que en realidad no se llama a base.X, nunca se ha evaluado como A. La propiedad de sobrescritura se debe a ese encabezado.

Si quieres hacerlo, haz una constante de ello.