Почему enum.ToString () дает результат, отличный от того, что показан во всплывающей подсказке отладчика?

2

Программа тестирования (.NET 2.0):

[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]
  • 0
    Спасибо за совет - мне всегда было интересно, как это было сделано.
Теги:
enums
tostring

2 ответа

2
Лучший ответ

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

Дополнительная информация о визуализаторах:

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню