2017-07-27 51 views
-2

我有一个产生此编译器错误的一些代码:C#如何调用的东西从一个类的方法中

CS0236 A field initializer cannot reference the non-static field, method, or property 'PublicModule.rnd'

的代码如下,与错误的行标:

public class PublicModule : ModuleBase 
{ 
    Random rnd = new Random(); 
    int value = rnd.Next(4,50); // <<<< Error is here 

    [Command("Ping")] 
    public async Task ping() 
    { 
     await ReplyAsync(Context.User.Mention + ", Pong!"); 
    } 

    [Command("Hara")] 
    public async Task hara() 
    { 
     await ReplyAsync("Hara noi te iubim <3 ."); 
    } 

    [Command("kek")] 
    public async Task kek() 
    { 
     await ReplyAsync(Context.User.Mention + ", kek"); 
    } 

    [Command("Random")] 
    public async Task Dice() 
    { 
     await ReplyAsync(Context.User.Mention + " ur random number is : " + value); 
    } 
} 

我怎样才能从课堂上调用rnd.Next?我在编码小白,我不知道我怎么能叫的东西从另一个类或函数等

+3

您需要将'rnd.Next'放入函数体中。您不能在C#中的函数之外编写语句。在显示值之前,将'int value = rnd.Next();'语句移到'Dick()'中。 – Yatin

+3

请尝试将代码放在问题中会更容易帮助 –

+1

我建议您从阅读C#教程开始。有几十个初学者教程。 – itsme86

回答

1

从类中删除声明int value = rnd.Next();并将其移动到功能Dick()如下:

public async Task Dice() 
{ 
    int value = rnd.Next(4, 50); 
    await ReplyAsync(Context.User.Mention + "ur random number is: " + value); 
} 

希望它有帮助。

+0

Upvote为好例子 –

+0

谢谢@ johnny5 – Yatin

+0

我认为你误读了方法名... – itsme86

0

把它在构造函数中:

Random rnd = new Random(); 
int value; 

public PublicModule() 
{ 
    value = rnd.Next(4,50); 
} 

但我也必须指出,这样只会给你一个新的随机数每一次类实例。如果每次调用该函数时都需要一个不同的随机数,则应该这样做:

[Command("Random")] 
public async Task Dice() 
{ 
    int value = rnd.Next(4,50); 
    await ReplyAsync(Context.User.Mention + " ur random number is : " + value); 
} 
相关问题