从TRY While循环中携带数据?

时间:2011-07-12 22:03:18

标签: c# while-loop

考虑这个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 个答案:

答案 0 :(得分:1)

因为counterm仅在while循环中的范围内。

在更高的范围内声明您的变量,以便从while循环外部访问它们。

答案 1 :(得分:1)

变量的范围仅在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重新定义实际创建新变量的变量,而不是写入全局变量。

答案 2 :(得分:0)

因为您在while块中声明了变量,所以一旦退出该块,该变量就会被删除。你必须进一步宣布它。

这是你的整个计划吗?你在那里列出的内容看起来不像它会编译因为在test()方法中没有声明counterm。

答案 3 :(得分:0)

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