2010-01-12 9 views
2

programme de test (NET 2.0):Pourquoi enum.ToString() donne un résultat différent de celui affiché dans l'info-bulle du débogueur?

[Flags] 
enum MyEnum 
{ 
    Member1 = 1, 
    Member2 = 2, 
} 

class Program 
{ 
    // Inspecting r shows "Member1 | Member2" 
    MyEnum r = MyEnum.Member1 | MyEnum.Member2; 

    // s = "Member1, Member2" 
    string s = r.ToString(); 
}

I serait attendu .ToString() pour renvoyer une chaîne avec les éléments séparés par un tuyau, mais qui est pas le cas.

Info de prime: l'appel Enum.Parse() sur la chaîne séparée par des virgules réussit, alors que le fournir avec une chaîne séparée par un tube échoue.

+2

d'info bonus - vous pouvez remplacer la façon dont le débogueur affiche vos propres classes avec les touches [DebuggerDisplayAttribute] – Jimmy

+0

Merci pour le conseil - Je me suis toujours demandé comment cela a été fait. –

Répondre

2

Le débogueur VS utilise des visualiseurs pour afficher les valeurs. Uniquement s'il n'y a pas de visualiseur pour un type de données spécifique, il retournera à la méthode .ToString().

Plus d'info sur visualiseurs:

http://msdn.microsoft.com/en-us/library/zayyhzts.aspx

1

L'implémentation ToString par défaut pour une énumération marquée avec FlagsAttribute est une liste séparée par des virgules. Cependant, ce n'est pas forcément le résultat ToString qui est affiché dans le débogueur - il doit y avoir un débogueur Visualizer mis en place pour les enums qui rend les valeurs avec le symbole OR ou le canal.

Questions connexes