C#编码问题

时间:2017-01-04 05:14:23

标签: c# string

我正在编写以下程序,我必须在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

3 个答案:

答案 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语句失败时。

由于在从分割中获取值之前您不知道所需的大小,因此简单地设置latdate变量并完全避免使用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