لا يمكن استخدام فئة متغيرة معلنة في الوظيفة داخل نفس الفئة. لماذا ا ؟

StackOverflow https://stackoverflow.com/questions/4078285

  •  28-09-2019
  •  | 
  •  

سؤال

لقد أعلنت متغيرًا في الفصل "الرئيسي" مع الاسم "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)
                {

                }

            }

        }
    }
}
هل كانت مفيدة؟

المحلول

الكتابة الضمنية لا تعمل مع الحقول ؛ إنه يعمل فقط مع المتغيرات المحلية.

أنا فكر في هذا ما نيتك الحقيقية هي:

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);
   ...
}

أنا حقا أشك في ذلك ، رغم ذلك.

نصائح أخرى

هذا لا يمكن تجميع. var-لا يمكن أن تكون الإعلانات المتغيرة من النوع على مستوى الفصل ، فقط مستوى الطريقة.

هناك مشكلات فنية مع السماح باستخدام VAR مع الحقول. هذا هو السبب في أنه يجب تحديد نوع ملموسة. فيما يلي تفسير للقضايا من إريك ليبرت:

لماذا لا var على الحقول

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top