Имя 'str' не существует в текущем контексте - PullRequest
0 голосов
/ 13 мая 2011

Я объявил здесь переменную класса

void downloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            Stream responseStream = e.Result;
            StreamReader responseReader = new StreamReader(responseStream);
            string response = responseReader.ReadToEnd();


            string[] split1 = Regex.Split(response, "},{");
            List<string> pri1 = new List<string>(split1);
            pri1.RemoveAt(0);
            string last = pri1[pri1.Count() - 1];
            pri1.Remove(last);

        }
    }

и я хочу использовать в этом методе classv ariable str

void AddPrimaryMarkerGraphics(object sender, getPrimaryListCompletedEventArgs e) 
        {
            List<PrimaryClass> primaryList = new List<PrimaryClass>(e.Result);
            PrimaryClass sc = new PrimaryClass();
            for (int a = 0; a <= e.Result.Count - 1; a++)
            {
                string schname = e.Result.ElementAt(a).PrimarySchool;
                string tophonour = e.Result.ElementAt(a).TopHonour;
                string cca = e.Result.ElementAt(a).Cca;
                string topstudent = e.Result.ElementAt(a).TopStudent;
                string topaggregate = e.Result.ElementAt(a).TopAggregate;
                string topimage = e.Result.ElementAt(a).TopImage;

                foreach (string item in str)
                {
                    string abc = "[{" + item + "}]";
                    byte[] buf = System.Text.Encoding.UTF8.GetBytes(abc);
                    MemoryStream ms = new MemoryStream(buf);

                    JsonArray users = (JsonArray)JsonArray.Load(ms);

                    var members = from member in users
                                  //where member["SEARCHVAL"]
                                  select member;

                    foreach (JsonObject member in members)
                    {
                        string schname = member["SEARCHVAL"];
                        string axisX = member["X"];
                        string axisY = member["Y"];
                        // Do something...
                        string jsonCoordinateString = "{'Coordinates':[{'X':" + axisX + ",'Y':" + axisY + "}]}";
                        CustomCoordinateList coordinateList = DeserializeJson<CustomCoordinateList>(jsonCoordinateString);

                        GraphicsLayer graphicsLayer = MyMap.Layers["MyGraphicsLayer_Primary"] as GraphicsLayer;

                        for (int i = 0; i < coordinateList.Coordinates.Count; i++)
                        {
                            Graphic graphic = new Graphic()
                            {
                                Geometry = new MapPoint(coordinateList.Coordinates[i].X, coordinateList.Coordinates[i].Y),
                                Symbol = i > 0 ? PrimarySchoolMarkerSymbol : PrimarySchoolMarkerSymbol

                            };
                            graphic.Attributes.Add("PrimarySchool", schname);
                            graphic.Attributes.Add("xcoord", axisX);
                            graphic.Attributes.Add("ycoord", axisY);
                            graphicsLayer.Graphics.Add(graphic);
                        }
                    }
                }
            }
        }

вот где ошибка показывает, помогите?

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Вы почти наверняка объявили переменную в методе (то есть как локальная переменная), а не непосредственно в самом классе (как переменная instance ). Например:

// Wrong
class Bad
{
    void Method1()
    {
        List<string> str = new List<string>();
    }

    void Method2()
    {
        foreach (string item in str)
        {
            ...
        }
    }
}

// Right
class Good
{
    private List<string> str = new List<string>();

    void Method1()
    {
        str = CreateSomeOtherList();
    }

    void Method2()
    {
        foreach (string item in str)
        {
            ...
        }
    }
}

В качестве дополнительного примечания: если вы очень плохо знакомы с C #, я бы настоятельно рекомендовал бы вам временно прекратить работу над Silverlight и написать несколько консольных приложений, чтобы вы могли работать и обучать Вы основы. Таким образом, вы можете сосредоточиться на C # как на языке и основных типах инфраструктуры (например, текст, числа, коллекции, ввод / вывод), а затем начать кодировать GUI позже. Программирование GUI часто включает в себя изучение гораздо большего (многопоточность, XAML, связывание и т. Д.), А попытка освоить все за один раз только усложняет задачу.

0 голосов
/ 13 мая 2011

Не работает, потому что str не объявлен в другой переменной. Это проблема Sscopong. Можете ли вы передать str как вход в другую функцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...