@kuzia_bRatok
Студент

Как обратиться к ресурсам динамично(по индексу или иным способом)?

Есть код, в котором, в зависимости от условия, должен запускаться тот или иной аудио файл (.wav). Также подключены 46 .wav файлов как ресурсы, к которым можно обращаться через:
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
///...
player.Stream = Properties.Resources.a; // a -- audio file

Вопрос в том, как, в зависимости от состояния программы, обращаться к разным файлам? Имеется в виду по индексу (и вытягивать как элемент массива) или еще какой-нибудь более динамичный способ. Не писать ведь 46 раз if else if.
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Sing303
Properties.Resources.ResourceManager
Смотрите методы GetObject и GetStream, можно обратиться к ресурсу по имени
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Для таких задач изобретены паттерны проектирования. Разумеется 46 if else if - зло. На мой взгляд тут может пригодится state-машина, хотя и не особо принципиально.Суть - Сделаете 46 классов реализующих один и тот же метод GetStream(название для примера), а в коде будете при действиях пользователя - подменять класс .Что-то вроде
someObject.State = new WarningState()
player.Stream = someObject.State.GetStream();

Так же можно написать 1 обертку над switch/case хотя это не очень красивое решение. Но тоже возможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы