Warm tip: This article is reproduced from serverfault.com, please click

其他-如何使用值设置为Null的C#任务作为可选参数?

(其他 - How do I make a C# Task with values set to Null as Optional Parameters?)

发布于 2020-12-04 07:31:02

我正在使用Discord Bot,命令之一是选择介于1和4之间的随机数,称为D4。

就其本身而言,它可以正常工作,但我想允许使用修饰符,在该修饰符中,用户提供输入,然后在将所有内容加在一起后,机器人将产生结果。

问题是我想允许最多5个单独的数字,但为了使Task / Command正常运行,不需要它们。

我尝试使它们可为空,int?使用将其设置为null,但出现错误,指出Nullable对象必须具有值。如果它们不能为空,则错误是如果用户没有输入足够的修饰符值,则输入的参数太少。

这是目前的样子-

public async Task D4(int? modifier1 = 4, int? modifier2 = null, int? modifier3 = null ,
        int? modifier4 = null, int? modifier5 = null)
    {

        int modifiers = (int)(modifier1 + modifier2 + modifier3 + modifier4 + modifier5);
        int randNum = Rnumber.Next(1, 4);

        int sum = randNum + modifiers;

        await Context.Channel.SendMessageAsync(Context.User.Mention + " rolled " + randNum.ToString()
            + " With Modifier the total is: " + sum.ToString());
    }

我不确定我需要做些什么来解决这个问题。有可能我会离开。

我得到的错误是“输入文本的参数太少”。和“可为空的对象必须具有一个值。”

Questioner
Slateboard
Viewed
11
SomeBody 2020-12-04 15:41:32

如果希望忽略修饰符(如果未输入),请尝试将0作为默认值。这样,你就不需要可为空的整数。另外,没有提供值的修饰符不会修改总和:

public async Task D4(int modifier1 = 4, int modifier2 = 0, int modifier3 = 0,
        int modifier4 = 0, int modifier5 = 0)
    {

        int modifiers = modifier1 + modifier2 + modifier3 + modifier4 + modifier5;
        int randNum = Rnumber.Next(1, 4);

        int sum = randNum + modifiers;

        await Context.Channel.SendMessageAsync(Context.User.Mention + " rolled " + randNum.ToString()
            + " With Modifier the total is: " + sum.ToString());
    }