我正在编写以下程序,我必须在if语句之外访问变量“lat”。但编译器在使用此语句时显示错误。
int LAC = Convert.ToInt32(lat[0], 16);
我得到的错误是:
名称lat在当前上下文中不存在
可能的原因是什么?因为我在if循环中使用了在if循环内初始化的字符串。此外,如果我将其声明为某个函数的本地,则此错误将被证明是合理的,但是当在循环内使用然后在循环外使用时它显示错误。可能是什么原因?代码如下:
flag = string.Compare(excel_getValue("A" + i), "DATE");
if (flag == 1)
{
string[] date = excel_getValue("A" + i).Split();
}
else if (flag != 1)
{
string[] lat = excel_getValue("A" + i).Split();
}
if (result == 0)
{
MessageBox.Show("Location Tracking Complete");
// Environment.Exit(0); // program exit
Thread.Sleep(5000);
}
int LAC = Convert.ToInt32(lat[0], 16); // Converting to int
答案 0 :(得分:1)
您需要了解范围。 lat lat变量的范围在else块内结束。因此,如果您需要在块之外使用它,则需要在if语句之前声明。
string[] lat = null;
if (flag == 1)
{
string[] date = excel_getValue("A" + i).Split();
}
else if (flag != 1)
{
lat = excel_getValue("A" + i).Split();
}
if (result == 0)
{
MessageBox.Show("Location Tracking Complete");
//Environment.Exit(0); // programme exit
Thread.Sleep(5000);
}
//This prevents from throwing unwanted exception.
if(lat != null)
int LAC = Convert.ToInt32(lat[0], 16); //Converting to int
答案 1 :(得分:0)
在if条件上下文中声明变量不是正确的方法。变量的范围将仅在条件内部,因此在外部使用它将产生类似“当前上下文中不存在名称lat”的错误。
Tuesday, January 3, 2017
事件虽然上面的代码是正确的,但如果condition为false且lat为null,则会出现错误。
答案 2 :(得分:0)
我认为你在这里缺少大部分评论。您的代码中显示的lat
变量只存在于if
语句中...只要您将if
语句lat
不再存在。如下:
else if (flag != 1)
{
string[] lat = excel_getValue("A" + i).Split();
}
// lat DNE here
即使你在if语句之前创建了一个string[] lat;
变量,编译器也会抱怨,因为当你在lat
语句中稍后初始化if
变量时,编译器会抱怨因为lat
有可能无法设置为某个值...即if
语句失败时。
由于在从分割中获取值之前您不知道所需的大小,因此简单地设置lat
和date
变量并完全避免使用if语句可能更容易。目前尚不清楚其他变量后面的代码会做什么,但使用if
语句创建变量会产生可能的初始化/存在错误。像下面这样的东西可能是更好的方法。
flag = string.Compare(excel_getValue("A" + i), "DATE");
string[] lat = excel_getValue("A" + i).Split();
string[] date = excel_getValue("A" + i).Split();
if (result == 0)
{
MessageBox.Show("Location Tracking Complete");
// Environment.Exit(0); // program exit
Thread.Sleep(5000);
}
If (lat.count > 0)
int LAC = Convert.ToInt32(lat[0], 16); // creating a variable MAYBE? Possible issues later
else
// lat is empty