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

Тестовая программа (.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 ]

2 голосов
/ 13 января 2010

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

Подробнее о визуализаторах:

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

1 голос
/ 13 января 2010

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

...