2010-01-12 7 views
2

Тестовая программа (.NET 2.0):Почему enum.ToString() дает другой результат, чем то, что показано в подсказке отладчика?

[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(); 
}

я ожидал бы .ToString() вернуть строку с членами разделенных трубы, но это не так.

Информация о бонусе: вызов Enum.Parse() в строке с разделителями-запятыми преуспевает, а при передаче строки с разделяемой трубкой происходит сбой.

+2

бонус информация - вы можете изменить, как отладчик отображает свои собственные классы с [DebuggerDisplayAttribute] – Jimmy

+0

Спасибо за совет - я всегда задавалась вопрос, как это было сделано. –

ответ

2

Отладчик VS использует визуализаторы для отображения значений. Только если нет визуализатора для определенного типа данных, он будет возвращаться к методу .ToString().

Более подробная информация о визуализаторах:

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

1

По умолчанию ToString реализация перечисления, отмеченная FlagsAttribute, является разделом, разделенным запятой. Тем не менее, это не обязательно результат ToString, который показан в отладчике - должен быть установлен визуализатор отладчика, установленный для перечислений, который отображает значения с поразным символом или трубой по.