Создание массива, который принимает только строку и экземпляры класса?C#

Место общения программистов C#
Anonymous
Создание массива, который принимает только строку и экземпляры класса?

Сообщение Anonymous »

У меня есть полностью функциональная система диалогов в Unity, которая использует строки для текста и команды для дополнительного функционала (пример: создание звука). Каждая команда прикреплена к строке, но не во всех строках есть команда, а в некоторых есть несколько команд. Все команды наследуются от абстрактного класса DialogueCommand.
Сейчас я создаю массив объектов и просто помещаю строку, а затем любые команды, которые мне нужны, вот так:

Код: Выделить всё

return new object[]
{
"this is an example line with two commands!", new SetImage("Image3"), new PlayMusic(musicClipsContainer.exampleClip2)
"line without commands"
"", new SetSmooth(false),
"and that's how the lines are made!" new StopMusic()
};
Это позже обрабатывается для возврата структуры для каждой строки с ее командами.
Дело в том, что object[] позволяет мне вводить практически все, что угодно, в то время как мне нужны только строки и DialogueCommand, которые могут создать ошибки и путаницу, если другой человек захочет использовать это. Итак, я хочу знать, есть ли способ создать массив, который принимает только эти типы данных или любую альтернативу.
Конечно, я рассматривал другие варианты, например:
  • Создание массива структуры, в которую они преобразуются. Проблема: слишком длинный синтаксис для каждой строки (

    Код: Выделить всё

    new DialogueLine("example text", new ExampleCommand()
    ).
  • Словарь или список: также делает синтаксис длиннее и сложнее, как если бы у меня был, например, List. Мне пришлось бы инициализировать массив DialogueCommand для каждой строки.
  • Использование интерфейсов: я мог бы создать массив с интерфейсом, реализованным обоими типами данных, но не думаю, что смогу реализовать интерфейс в строке.
Есть ли способ исключить все, что не является строкой или DialogueCommand из этого массива?

Подробнее здесь: https://stackoverflow.com/questions/798 ... of-a-class

Вернуться в «C#»