2017-07-27 12 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を呼び出すことができますか?私は、コーディングでのnoobだと私は、私はクラスからの文int value = rnd.Next();を削除し、次のように機能Dick()に移動

+3

関数本体の中に 'rnd.Next'を置く必要があります。 C#の関数の外に文を書くことはできません。値を表示する前に 'int value = rnd.Next();'ステートメントを 'Dick()'に移動してください。 – Yatin

+3

質問にコードを入れてみてください。より簡単に助けてくれるでしょう –

+1

私はC#チュートリアルを始めることをお勧めします。初心者向けに数多くのチュートリアルがあります。 – itsme86

答えて

1

など他のクラスや関数から物事を呼び出すことができるかわからない:

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); 
} 
関連する問題