2010-11-02 66 views
2

我已經在名爲'context2'的類'Main'中聲明瞭一個變量。但是我不能在函數'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

是不是你的例子過於冗長? – 2010-11-02 13:48:12

+0

你說你不能使用它,你看到了什麼錯誤? – 2010-11-02 13:49:06

+0

當您嘗試運行此代碼時,您會得到什麼錯誤? – 2010-11-02 13:49:37

回答

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

相關問題