Команды C# Discord.NET Как использовать массив строк в качестве аргумента

Я использую Discord.NET 1.0.2, и этот вопрос специфичен для Discord.NET.

Я использую Discord.Commands для того, как я работаю со своими командами, и я их инициализирую так

var msg = message as SocketUserMessage;
var context = new SocketCommandContext(_client, msg);
int argPos = 0;
if(msg.HasCharPrefix('>', ref argPos))
{
    var result = await _service.ExecuteAsync(context, argPos);
}

Затем в моем отдельном классе для конкретной команды у меня есть

public class Command : ModuleBase<SocketCommandContext>
{
    [Command("test")]
    public async Task balanceCommmand(String[] stringArray)
    {
        // code
    }
}

Однако при запуске программы я получаю System.InvalidOperationException «Дополнительная информация: для типа String[] не найден считыватель типов, его необходимо указать»

Раньше я использовал параметры в асинхронной задаче, но, похоже, он не хочет иметь массив строк в качестве параметра.

Как я могу передать массив строк в качестве аргумента команде, используя Discord.Commands версии 1.0.2.

Если нет способа сделать это, есть ли способ имитировать это, используя альтернативу?

Я посмотрел в Google и не нашел кого-то с такой же проблемой, как у меня, или даже похожей на нее.


person JarFile    schedule 30.10.2017    source источник
comment
Вы можете добавить пользовательский TypeReader, используя метод AddTypeReader CommandService.   -  person cwharris    schedule 31.10.2017


Ответы (1)


Вместо просто String[] вам нужно поставить params перед этим так:

public class Command : ModuleBase<SocketCommandContext>
{
    [Command("test")]
    public async Task balanceCommmand(params String[] stringArray)
    {
        // code
    }
}

Ключевое слово params: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params

person Unknown    schedule 31.10.2017