kann nicht deklarierte Variable Klasse in der Funktion innerhalb der gleichen Klasse. Warum ?
-
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)
{
}
}
}
}
}
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 ApiContext
object, 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: