2012-01-16 35 views
7

ランダム関数を使用して小さなHeadsまたはTailsプログラムを作成し、 'System.Random'タイプのオブジェクトをキャストできません'System.IConvertible'メッセージが表示され、その理由がわかりません。誰かが少し光を当てることができますか?ありがとう。ランダム戻り整数でタイプ 'System.Random'のオブジェクトをタイプ 'System.IConvertible'にキャストできません

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Random rNum = new Random(); 
    rNum.Next(2, 47); 


    int rrNum = Convert.ToInt32(rNum); 

    string result; 
    result = (rrNum % 2 == 0) ? "Heads" : "Tails"; 
    lblResult.Text = result; 

} 
+1

将来のアドバイス:C#でエラーメッセージが表示された場合は、発生した行を確認し、正しいパラメータタイプ/変数タイプ/ etcを持っていることを確認し、内部例外をチェックします。 –

答えて

7

Next。だから、正しいコードは次のとおりです。

Random rNum = new Random(); 
int rrNum = rNum.Next(2, 47); 

だからそこから整数にrNumを変換する必要はありません。

Convert.ToIn32()が渡されたオブジェクトが IConvertibleを実装して要求しているためだ
Random rNum = new Random(); 
int rrNum = rNum.Next(2, 47); 
string result = (rrNum % 2 == 0) ? "Heads" : "Tails"; 
lblResult.Text = result; 
+0

+1コードの文脈で実際に見られた唯一の答え。実際にはOPが本当にランダムなタイプのオブジェクトを変換しようとしているとは思われません;) – Abel

+0

ありがとうございました。 – NewUser101

1

乱数を取得するには、あなたはそうのような、Random.Next()メソッドを呼び出す必要があります:

Random rNum = new Random(); 
int YourRandomNumber = rNum.Next(2, 47); 
-2

正確にエラーメッセージ状態として、あなたはこの場合はintにSystem.Randomのインスタンスを変換カント。

int rrNum = rNum.Next(2,47); 

rNum

はタイプ Randomは次のとおりです。

0

あなたがそうのような変数にrNum.Next(2,47)から返された値を割り当てる必要があります。そのタイプをintに変換することはできません。

rNum.Next(2,47)は、intを返します。あなたがRandom.Nextのドキュメントを見れば、あなたはその型シグネチャがあることがわかります。

public virtual int
public virtual int Next(int minValue, int maxValue); 

intメソッドの戻り値の型です。この情報を使用して、Nextへの呼び出しから戻されたものを格納する必要がある変数のタイプを判別することができます。

関連する問題