ne peut pas utiliser la classe déclarée variable dans la fonction dans la même classe. Pourquoi ?

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

  •  28-09-2019
  •  | 
  •  

Question

i ont déclaré une variable dans la classe « principale » avec le nom « contexte2 ». Mais je ne peux pas utiliser la variable dans la fonction « Main_Load ». ce que je fais 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)
                {

                }

            }

        }
    }
}
Était-ce utile?

La solution

frappe Implicite ne fonctionne pas avec des champs; il fonctionne uniquement avec des variables locales.

pense c'est ce que vous avez l'intention réelle est:

ApiContext context2 = new ApiContext(apiKey);

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

Dans le cas très improbable que ApiContext est une sorte de-interface fluide pour laquelle ApiContext.Initialize(bool)returns différent ApiContextobject, cela devrait être ce que vous voulez:

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

bien qu'il serait beaucoup plus clair si vous avez fait:

ApiContext context2;

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

Je doute vraiment que, si.

Autres conseils

Cela ne peut pas compiler. déclarations de variables de type var ne peut pas être au niveau de la classe, seul le niveau de la méthode.

Il y a des problèmes techniques avec var permettant d'utiliser des champs. Ceci est la raison pour laquelle doit être spécifié un type de béton. Voici une explication des problèmes de Eric Lippert:

Pourquoi pas var sur les champs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top