Foro de elhacker.net

Programación => .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
  1. public string valor1;
  2. public float num2;
  3. public int num1 = Convert.ToInt32(valor1);

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

Código:
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
  1. public class sumar
  2. {
  3.    public string valor1;
  4.    public float num2;
  5.    public int num1;
  6.  
  7.   //...
  8.   //...
  9.  
  10.   //Este es el constructor, el cual puede variar de acuerdo a tu clase,
  11.   //solo estoy ilustrando
  12.   public sumar()
  13.   {
  14.      //...
  15.      num1 = Convert.ToInt32(valor1);
  16.      //...
  17.    }
  18. }

Salu2s


Título: Re: [C#] Convertir string en int
Publicado por: DeMoNcRaZy en 28 Agosto 2015, 16:23 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
  1. public class sumar
  2. {
  3.    public string valor1;
  4.    public float num2;
  5.    public int num1;
  6.  
  7.   //...
  8.   //...
  9.  
  10.   //Este es el constructor, el cual puede variar de acuerdo a tu clase,
  11.   //solo estoy ilustrando
  12.   public sumar()
  13.   {
  14.      //...
  15.      num1 = Convert.ToInt32(valor1);
  16.      //...
  17.    }
  18. }

Salu2s

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

Saludos.