no puede utilizar la clase declarada variable en la función dentro de la misma clase. por qué ?
-
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)
{
}
}
}
}
}
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 ApiContext
object, 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: