C# 如何从阵列发送随机图片
我最近一直在开发我的discord机器人,我想创建一个命令,从给定的数组发送一张随机的照片。目前我有以下代码:C# 如何从阵列发送随机图片,c#,asp.net,asp.net-core,discord,C#,Asp.net,Asp.net Core,Discord,我最近一直在开发我的discord机器人,我想创建一个命令,从给定的数组发送一张随机的照片。目前我有以下代码: [Command("sendpic"), Summary("")] public async Task SendPic() { string[] RandomPic = { "https://images.unsplash.com/photo-1536746803623-cef87080bfc8?ixlib=rb-1.2.1&ixid=eyJhc
[Command("sendpic"), Summary("")]
public async Task SendPic()
{
string[] RandomPic = { "https://images.unsplash.com/photo-1536746803623-cef87080bfc8?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1000&q=80",
"https://s3.amazonaws.com/artallnight/static/files/2018/08/14154730/back-1024x532.jpg",
"https://www.abc.net.au/news/image/9776766-3x2-700x467.jpg",
"https://static1.squarespace.com/static/58d2d1d003596ef5151dd694/t/5911277b893fc011d4e8543d/1494296445782/stars2.jpg?format=1500w"
};
Random random = new Random();
int randomNumber = random.Next(0, 3);
EmbedBuilder d = new EmbedBuilder();
d.WithColor(120, 40, 23);
if (randomNumber == 1)
{
await Context.Channel.SendMessageAsync(RandomPic[1]);
} else if (randomNumber == 2) {
await Context.Channel.SendMessageAsync(RandomPic[2]);
} else if (randomNumber == 3){
await Context.Channel.SendMessageAsync(RandomPic[3]);
} else {
await Context.Channel.SendMessageAsync(RandomPic[0]);
}
}
但它似乎不起作用,因为每当我调用“sendpic”命令时,它只发送一张图片。如何从阵列发送给定的图片(每次调用时每个图片?问题是每次调用命令时,您都在创建一个新的
Random
实例。这个类不是用来这样使用的。
您应该在SendPic()方法的作用域之外有一个静态变量,如下所示:
public class YourModule : ModuleBase<SocketCommandContext>
{
private static readonly Random random = new Random();
//Your commands here
}
[Command("sendpic"), Summary("")]
public async Task SendPic()
{
string[] RandomPic =
{
"https://images.unsplash.com/photo-1536746803623-cef87080bfc8?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1000&q=80",
"https://s3.amazonaws.com/artallnight/static/files/2018/08/14154730/back-1024x532.jpg",
"https://www.abc.net.au/news/image/9776766-3x2-700x467.jpg",
"https://static1.squarespace.com/static/58d2d1d003596ef5151dd694/t/5911277b893fc011d4e8543d/1494296445782/stars2.jpg?format=1500w"
};
int randomNumber = random.Next(0, RandomPic.Length);
EmbedBuilder d = new EmbedBuilder();
d.WithColor(120, 40, 23);
await Context.Channel.SendMessageAsync(RandomPic[randomNumber]);
}
顺便说一下,您不需要逐个检查结果。它不能很好地升级(想象一下检查1到1000之间的数字)。
检查我是如何将RandomPic.Length
设置为randomNumber
的上限的,删除了if
语句并直接调用RandomPic[randomNumber]
(在RandomPic
数组的randomNumber
位置检索元素。为什么要检查randomNumber
的值?只需在数组中使用randomNumber
。Context.Channel.SendMessageAsync(RandomPic[randomNumber]);
。我还建议在函数外部初始化随机对象。很有可能总是得到相同的图片,请参阅。此外,您生成的数字介于0和2之间,因为MaxValue是独占的。顺便说一句,random。下一步(0,3)
将永远不会返回3。maxValue
是独占的,您需要随机写入。下一步(0,4)
如果您希望得到3作为结果。好的,看来我已经解决了这个问题。它现在会返回其他图片。感谢您的帮助!