нести данные из ПОПРОБУЙТЕ, пока цикл? - PullRequest
0 голосов
/ 13 июля 2011

Рассмотрим этот цикл while, который обнуляет мои значения после его завершения.

Строка counterm теперь пуста в конце программы. Как мы можем нести значение из цикла while?

void somefunction() {   
    try {                  
      using (StreamReader sr = new StreamReader("Counter.txt"))
      {
        String line;
        while ((line = sr.ReadLine()) != null)
        {
            Console.WriteLine(line);
            string countern = line + "_1";
            string counterm = line + "_2";
            int counter = Convert.ToInt32(line);
            sr.test(counterm);
        }
      }
    }
    catch (Exception e)
    {
        // Let the user know what went wrong.
    Console.WriteLine("The file could not be read:");
    Console.WriteLine(e.Message);
    Thread.Sleep(60000);            
    }
}
public static void test(counterm)
{
        Console.WriteLine(counterm);
        Console.ReadLine();
}

Ответы [ 4 ]

1 голос
/ 13 июля 2011

Область ваших переменных в цикле while * .Вне петли не определены.Это даже не должно компилироваться, если вы не объявили свои переменные в глобальной области видимости.


Из комментария: Тогда ваш цикл while должен выглядеть примерно так:

while ((line = sr.ReadLine()) != null)
{
    Console.WriteLine(line);
    countern = line + "_1";
    counterm = line + "_2";
    int counter = Convert.ToInt32(line);

    sr.test();    // why `sr`? there is no test-method defined for streamreader.
                  // is your class called `sr` as well?
}

Переменныетолько "живой" в пределах области, в которой они определены. Opon переопределяет переменные, которые вы фактически создаете, а не записываете в глобальные переменные.

1 голос
/ 13 июля 2011

Поскольку ваш counterm находится только в области видимости в цикле while.

Объявите ваши переменные в более широкой области видимости, чтобы иметь доступ к ним вне цикла while.

0 голосов
/ 13 июля 2011

counterm - переменная локальная для вашего цикла.Кроме того, ваш код не компилируется, потому что он неполон, но мое предложение будет примерно таким:

string ParseCounters()
{
    string counterm = "";

    ...
    String line;
    while ((line = sr.ReadLine()) != null)
    {
        ...
        counterm = line + "_2"
    }
    ...

    return counterm;

}

public static void test()
{
    Console.WriteLine(ParseCounter());
    Console.ReadLine();
}
0 голосов
/ 13 июля 2011

Поскольку вы объявляете переменную внутри блока while, переменная удаляется, как только вы выходите из этого блока. Вы должны были бы объявить это дальше.

Это вся ваша программа? То, что вы там перечислили, не похоже, что оно скомпилируется, потому что counterm вообще не объявлен внутри метода test ().

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