2012-01-16 46 views
7

Estoy escribiendo un pequeño programa de Cabezas o Colas usando la función Aleatorio y recibo un objeto No se puede convertir del tipo 'System.Random' para escribir Mensaje 'System.IConvertible' y no estoy seguro de por qué. Alguien puede arrojar un poco de luz. Gracias.No se puede convertir el objeto del tipo 'System.Random' para escribir '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

Un consejo para el futuro: siempre que reciba un mensaje de error en C#, verifique la línea en la que ocurrió, asegúrese de tener los tipos de parámetros correctos/tipos de variables/etc., verifique las excepciones internas. –

Respuesta

7

Next en aleatorias rendimientos un entero. Por lo que el código correcto es:

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

así que desde allí no hay necesidad de convertir rNum a un entero.

Random rNum = new Random(); 
int rrNum = rNum.Next(2, 47); 
string result = (rrNum % 2 == 0) ? "Heads" : "Tails"; 
lblResult.Text = result; 
+0

+1 La única respuesta que realmente se 'miró' en el contexto del código. Parece de hecho improbable que el OP realmente tenga la intención de convertir un objeto de tipo aleatorio;) – Abel

+0

Gracias que funcionó. – NewUser101

1

Esto se debe a Convert.ToIn32() demandas del objeto pasado implementa IConvertible.

Para recuperar un número aleatorio, es necesario llamar al método Random.Next(), así:

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

Exactamente como dice el mensaje de error, no puedes convertir una instancia de System.Random en este caso un Int .

0

tiene que asignar el valor devuelto por rNum.Next(2,47) a una variable de este modo:

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

rNum es de tipo Random. No puede convertir ese tipo a int.

rNum.Next(2,47) devuelve el int que desee. Si nos fijamos en la documentación de Random.Next verá que su tipo de firma es:

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

El int en public virtual int es el tipo de retorno del método. Puede utilizar esta información para determinar qué tipo de variable necesita para almacenar lo que devuelve la llamada al Next.

Cuestiones relacionadas