2010-11-02 1 views
2

Я объявил переменную в классе «Главная» с именем «context2». Но я не могу использовать переменную внутри функции «Main_Load». Что я делаю не так ?не может использовать переменный объявленный класс в функции внутри того же класса. Зачем ?

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

       } 

      } 

     } 
    } 
} 
+0

Не ваш пример чрезмерно многословным? –

+0

Вы говорите, что не можете использовать его, какую ошибку вы видите? –

+0

Какая ошибка возникает при попытке запустить этот код? –

ответ

4

Неявная типизация не работает с полями; он работает только с локальными переменными.

Я думаю это то, что ваше реальное намерение:

ApiContext context2 = new ApiContext(apiKey); 

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

В маловероятном случае, что ApiContext какая-то свободно-интерфейса, для которого ApiContext.Initialize(bool) возвращает другогоApiContext объекта, это должно быть то, что вы хотите:

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

хотя было бы гораздо понятнее, если вы сделали:

ApiContext context2; 

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

Я действительно сомневаюсь, что, хотя.

1

Это невозможно скомпилировать. var Объявление переменной типа не может быть на уровне класса, только на уровне метода.

1

Существуют технические проблемы, позволяющие использовать var для полей. Вот почему должен быть указан конкретный тип. Вот объяснение проблем с Эриком Липпертом:

Why no var on fields