考虑这个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();
}
答案 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();
}