Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

247
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda