no puede utilizar la clase declarada variable en la función dentro de la misma clase. por qué ?

StackOverflow https://stackoverflow.com/questions/4078285

  •  28-09-2019
  •  | 
  •  

Pregunta

He declarado una variable en la clase 'principal' con el nombre de 'contexto2'. Pero no puedo utilizar la variable dentro de la función 'Main_Load'. ¿Qué estoy haciendo mal?

using System;
using System.Windows.Forms;
using Soapi;
using Soapi.Domain;

namespace SO_Console_Client
{
    public partial class Main : Form
    {
        const string apiKey = "*************";
        var context2 = new ApiContext(apiKey).Initialize(false);
        public Main(String GravatarURL, User user)
        {
            InitializeComponent();
            pictureBox1.Load(GravatarURL);  //Loads the Gravatar image from the url

            //set the reputation details
            lblRep.Text = String.Format("Reputation: {0}", user.Reputation);

            //Sets the badge details
            lblBadge.Text = String.Format("Badges: gold={0} silver={1} bronze={2}", user.BadgeCounts.Gold, user.BadgeCounts.Silver, user.BadgeCounts.Bronze);

            groupBox1.Text = user.DisplayName.ToString();
        }

        private void Main_Load(object sender, EventArgs e)
        {
            Soapi.Queries.QuestionsUnansweredQuery query = context2.Official.StackOverflow.Questions.Unanswered;
            foreach (Question q in query)
            {
                try
                {
                    Console.WriteLine(q.Title.ToString());
                    //Console.WriteLine(q.Body.ToString());
                }
                catch (System.NullReferenceException ex)
                {

                }

            }

        }
    }
}
¿Fue útil?

Solución

tipos implícitos no funciona con campos; Sólo funciona con variables locales.

pensar esto es lo que su intención real es:

ApiContext context2 = new ApiContext(apiKey);

public Main(String GravatarURL, User user)
{
   context2.Initialize(false);
   ...
}

En el caso muy poco probable que ApiContext es una especie de fluidez de la interfaz para la que ApiContext.Initialize(bool)returns un diferente ApiContextobject, esto debe ser lo que quieres:

ApiContext context2 = new ApiContext(apiKey).Initialize(false); 

A pesar de que sería mucho más claro si lo hizo:

ApiContext context2;

public Main(String GravatarURL, User user)
{
   context2 = new ApiContext(apiKey).Initialize(false);
   ...
}

Realmente duda de que, sin embargo.

Otros consejos

Esto no se puede compilar. declaraciones de variables de tipo var no pueden estar en el nivel de clase, sólo el nivel de método.

Hay problemas técnicos con var permitiendo que se utilizarán con los campos. Es por esto que se debe especificar un tipo concreto. He aquí una explicación de los temas de Eric Lippert:

Por qué hay var en los campos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top