Является ли оператор switch нормальным для 30 или около того условий? - PullRequest
17 голосов
/ 14 апреля 2010

Я нахожусь на завершающей стадии создания парсера тегов MP4 в .Net. Для тех, кто имеет опыт работы с тегами музыки, вы должны знать, что в среднем около 30 тегов. Если протестированы различные типы циклов и кажется, что оператор switch со значениями Const, кажется, является подходящим способом для отлова тегов в двоичном виде.

Переключатель позволяет мне выполнять поиск в двоичном файле без необходимости знать, в каком порядке хранятся теги, или если они присутствуют, но мне интересно, будет ли кто-то против использования оператора switch для стольких условных выражений.

Любое понимание очень ценится.

РЕДАКТИРОВАТЬ: Я думаю, что теперь я должен добавить, что при обсуждении этого является то, что функция является рекурсивной, я должен извлечь это условие и передать данные в метод, который я могу убить?

Ответы [ 13 ]

0 голосов
/ 15 апреля 2010

А как насчет старого доброго для цикла? Я думаю, вы можете создать это таким образом. Разве коммутационный корпус не трансформируется только если-либо? Я всегда стараюсь писать код с использованием цикла, если количество операторов case становится выше допустимого. И 30 дел в переключателе слишком высоки для меня.

0 голосов
/ 15 апреля 2010

Я хотел добавить свой ответ, просто чтобы отскочить от людей ...

  1. Создайте объект, который содержит «имя двоичного тега», «Данные», «Имя свойства».
  2. Создайте список из них на общую сумму известных тегов, добавив имя тега и имя свойства.
  3. При анализе используйте linq, чтобы сопоставить найденное имя с object.binarytagname и добавить данные
  4. отразить в свойстве и добавить данные ...
0 голосов
/ 15 апреля 2010

Я не знаком с технологией MP4, но я хотел бы изучить возможность использования некоторых интерфейсов здесь. Передайте объект, попробуйте привести к интерфейсу.

public void SomeMethod(object obj)
{
  ITag it = obj as ITag;

  if(it != null)
  {
    it.SomeProperty = "SomeValue";
    it.DoSomthingWithTag();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...