Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从阵列发送随机图片_C#_Asp.net_Asp.net Core_Discord - Fatal编程技术网

C# 如何从阵列发送随机图片

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

我最近一直在开发我的discord机器人,我想创建一个命令,从给定的数组发送一张随机的照片。目前我有以下代码:

[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作为结果。好的,看来我已经解决了这个问题。它现在会返回其他图片。感谢您的帮助!