2010-06-28 16 views
0

J'ai une variable chaîne et une constante chaîne. Les deux devraient avoir la même valeur (je teste l'égalité dans un conditionnel). Les valeurs «correctes» des deux devraient être «scl». Pendant le débogage, si je mets une montre sur chacun d'eux, les regarde dans les fenêtres locales, ou passe la souris dessus, la valeur affichée est "sd", qui est la valeur d'une constante différente dans la classe (il y en a beaucoup d'autres constantes et variables de la classe qui affichent correctement les valeurs). Si j'insère un Debug.WriteLine pour la variable/valeur constante en question, (dans la même portée que la montre) la fenêtre de sortie imprime la valeur correcte de chacun. Pour la vie de moi, je ne peux pas comprendre pourquoi cela se produit, ou comment le corriger.Pourquoi mes montres VS2008 affichent-elles des valeurs incorrectes?

+0

Vous avez peut-être déjà essayé, mais ma première pensée est, avez-vous essayé de redémarrer VS? –

+0

Semble à moi comme vous devez nettoyer et reconstruire votre projet. Certaines informations de débogage sont désactivées. –

+0

Déjà fait les deux. Mais merci de proposer. –

Répondre

0

Est-ce une propriété de chargement paresseux? J'ai eu des problèmes comme ça dans le passé où je l'ai fait quelque chose comme ça (par exemple horriblement artificiel, mais il le fera)

public ClassWithMoo 
{ 
    private string moo; 

    public string Moo 
    { 
     get 
     { 
     if (String.IsNullOrEmpty(this.moo)) this.moo = "Baa"; 
     return this.moo; 
     } 
     set 
     { 
     this.moo = value; 
     } 
    } 
} 

public ClassThatUsesMoo 
{ 
    ClassWithMoo cow = new ClassWithMoo(); 

    // breakpoint here would show cow.Moo = "Baa" 
    // This is because the debugger/watch window will instantiate the property! 

    someCodeHere(); 

    cow.Moo = "Moo"; 
    debug.WriteLine(cow.Moo); // outputs 'Moo' now that it has been set properly 
} 
+0

Cela aurait du sens. Cependant, rien de tel n'est fait. En outre, l'une des valeurs erronées est une constante, donc la réaffectation de la constante à la valeur correcte ne pourrait pas être faite. –

1

me semblait avoir fixé en changeant la valeur de la constante, en cours d'exécution une session de débogage, puis en changeant la valeur à ce qu'elle devrait être. Peut-être que cela a effacé une sorte de cache de débogage.

Merci pour l'aide à tous!

+2

Je pense savoir ce qui s'est passé. La sémantique d'une constante est censée être que la valeur est * constante * pour * toute l'éternité *. Le compilateur suppose qu'une constante * never * change, même entre les versions d'un assembly. Par conséquent, lorsque l'assembly B référence une constante C à partir de l'assembly A, le compilateur * incorpore * la valeur de C dans B. Si vous changez ensuite la constante dans A, B conserve la valeur d'origine et le restera jusqu'à ce que vous recompiliez B. Voulez-vous que la valeur soit quelque chose qui est récupérée à l'exécution, utilisez une propriété ou un champ readonly à la place. –