不能在同一个类里面的函数中使用变量声明的类。为什么?

时间:2010-11-02 13:46:24

标签: c# .net stackexchange-api

我在类'Main'中声明了一个名为'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)
                {

                }

            }

        }
    }
}

3 个答案:

答案 0 :(得分:4)

隐式输入不适用于字段;它只适用于局部变量。

认为这就是你的真实目的:

ApiContext context2 = new ApiContext(apiKey);

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

在极不可能的情况下ApiContextApiContext.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 :(得分:1)

这无法编译。 var - 类型变量声明不能在类级别,只能在方法级别。

答案 2 :(得分:1)

允许var与字段一起使用存在技术问题。这就是必须指定具体类型的原因。以下是Eric Lippert对问题的解释:

Why no var on fields