kann nicht deklarierte Variable Klasse in der Funktion innerhalb der gleichen Klasse. Warum ?

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

  •  28-09-2019
  •  | 
  •  

Frage

ich habe eine Variable in der Klasse ‚Main‘ mit dem Namen ‚context2‘ erklärt. Aber ich kann nicht die Variable innerhalb der Funktion ‚Main_Load‘ verwenden. was mache ich falsch?

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)
                {

                }

            }

        }
    }
}
War es hilfreich?

Lösung

Implizite Typisierung funktioniert nicht mit Feldern; es funktioniert nur mit lokalen Variablen.

I denkt das ist, was Ihre wahre Absicht ist:

ApiContext context2 = new ApiContext(apiKey);

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

Im höchst unwahrscheinlichen Fall, dass ApiContext eine Art fließend-Schnittstelle ist für die ApiContext.Initialize(bool)returns eines andere ApiContextobject, sollte das sein, was Sie wollen:

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

obwohl es viel klarer sein würde, wenn Sie getan haben:

ApiContext context2;

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

ich wirklich Zweifel, dass, obwohl.

Andere Tipps

Das kann nicht kompilieren. var-Typ Variablendeklarationen nicht auf Klassenebene sein, nur die Methode Ebene.

Es gibt technische Probleme mit ermöglicht var mit Feldern verwendet werden. Aus diesem Grund muss ein konkreter festgelegt werden. Hier ist eine Erklärung der Probleme von Eric Lippert:

Warum nicht var auf Feldern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top