Создание массива, который принимает только строку и экземпляры класса?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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