Я создаю клиент сетевого чата в C # как побочный проект. В дополнение к простым текстовым сообщениям, у меня также есть команды с префиксом, которые можно вводить в поле ввода TextBox. Я использовал модульный подход, создав перечисление, содержащее все различные команды, и затем украсив эти команды атрибутами.
Атрибуты указывают, какая команда с префиксом косая черта может быть введена для запуска команды, а также любые псевдонимы к первичному идентификатору команды и ее использованию.
Пример:
public enum CommandType : byte
{
[PrimaryIdentifier("file"),
AdditionalIdentifier("f"),
CommandUsage("[<recipient>] [<filelocation>]")]
FileTransferInitiation,
[PrimaryIdentifier("accept"),
AdditionalIdentifier("a")]
AcceptFileTransfer,
// ...
}
Моя проблема возникает, когда я пытаюсь разрешить несколько псевдонимов для основной команды. Я попытался сделать это двумя способами: разрешив дубликаты атрибута AdditionalIdentifier
или указав аргумент конструктора в AdditionalIdentifier
a params string[]
.
С первым я реализовал это, украсив класс атрибута AttributeUsage
и установив AllowMultiple
в true. Хотя это действительно дает то, что я ищу, я чувствую, что может быть очень шумно и очень быстро иметь несколько строк псевдонимов в дополнение к другим атрибутам.
Последний также работает, однако он генерирует предупреждение компилятора CS3016 и говорит, что этот подход не совместим с CLS. Очевидно, это не обязательно мешает мне продолжать его использовать, но я научился всегда воспринимать предупреждения как ошибки.
Мой настоящий вопрос: должен ли я игнорировать свои возражения с дубликатами и просто использовать их, или есть какое-то другое решение, которое можно использовать?
Спасибо.