Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
Valor de propiedad de "base" en el depurador

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, intento evaluar base.X y obtengo su valor "B" :

extraño valor base.X?

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

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Este es un error de Roslyn

Como otros han mencionado, este error es bien conocido .

Puede verificar trivialmente que el valor real de base.X es A , es solo el Evaluador de expresiones que devuelve el resultado incorrecto:

Este está en Rider

over 4 years ago · Santiago Trujillo Denunciar

0

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

Debido a que base.X en realidad no se llama, nunca se evaluó como A. La propiedad de sobrescritura se debe a ese interlineado.

Si desea hacerlo, conviértalo en una constante.

over 4 years ago · Santiago Trujillo Denunciar

0

¿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.

Pruébalo con este código:

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

Explicando este código: public override string 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"; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda