我正在使用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());
}
我不确定我需要做些什么来解决这个问题。有可能我会离开。
我得到的错误是“输入文本的参数太少”。和“可为空的对象必须具有一个值。”
如果希望忽略修饰符(如果未输入),请尝试将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());
}
这似乎已经解决了我的问题。谢谢。
@Slateboard请重写您的问题,这样至少可以看起来像是一个答案...或放入像这样的最小重复性示例,
int? a = 4; int? b = null; int c = (int)(a+b);
并更新问题以询问有关传递/使用可空值的问题...当前的问答对确实对未来的访问者不利。 。@AlexeiLevenkov我对这里的事情并不完全熟悉,所以我不会“理解”我应该如何重写它。