Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: DeMoNcRaZy en 28 Agosto 2015, 12:47 PM

Título: [C#] Convertir string en int
Publicado por: DeMoNcRaZy en 28 Agosto 2015, 12:47 PM
Buenas,

Tengo un problema a la hora de pasar un string a un int,

Código (csharp) [Seleccionar]
public string valor1;
public float num2;
public int num1 = Convert.ToInt32(valor1);


Y este es el error que me salta, subrayándome la palabra valor1 en el Convert.

Error CS0236 A field initializer cannot reference the non-static field, method, or property 'sumar.valor1'

sumar es una clase.

Si supieran guiarme a que se debe dicho error lo agradecería.
Lo he echo en el archivo principal y hay me funcionó pero lo hago en una clase y me salta error a parte de haber probado de varias formas diferentes.
Gracias.

Saludos.
Título: Re: [C#] Convertir string en int
Publicado por: DarK_FirefoX en 28 Agosto 2015, 15:01 PM
Este error viene dado porque no puedes usar una variable de instancia para inicializar otra variable de instancia.

El problema es que el compilador puedes re-organizar el orden, por lo tanto no hay garantía de que valor1 se inicialize primero que num1 por lo que te puede dar una excepción NullReferenceException

Para darle vuelta a este problema puedes colocar esa linea de código dentro del constructor de tu clase:

Código (csharp) [Seleccionar]
public class sumar
{
   public string valor1;
   public float num2;
   public int num1;

  //...
  //...

  //Este es el constructor, el cual puede variar de acuerdo a tu clase,
  //solo estoy ilustrando
  public sumar()
  {
     //...
     num1 = Convert.ToInt32(valor1);
     //...
   }
}


Salu2s
Título: Re: [C#] Convertir string en int
Publicado por: DeMoNcRaZy en 28 Agosto 2015, 16:23 PM
Cita de: DarK_FirefoX en 28 Agosto 2015, 15:01 PM
Este error viene dado porque no puedes usar una variable de instancia para inicializar otra variable de instancia.

El problema es que el compilador puedes re-organizar el orden, por lo tanto no hay garantía de que valor1 se inicialize primero que num1 por lo que te puede dar una excepción NullReferenceException

Para darle vuelta a este problema puedes colocar esa linea de código dentro del constructor de tu clase:

Código (csharp) [Seleccionar]
public class sumar
{
   public string valor1;
   public float num2;
   public int num1;

  //...
  //...

  //Este es el constructor, el cual puede variar de acuerdo a tu clase,
  //solo estoy ilustrando
  public sumar()
  {
     //...
     num1 = Convert.ToInt32(valor1);
     //...
   }
}


Salu2s

Gracias por tu respuesta.
Gracias a ello también he deducido que puedo declarar la misma variable dentro de la función.

Saludos.