2017-01-04 90 views
0

我在寫下面的程序,我必須在if語句之外訪問變量「lat」。但編譯器在使用此語句時顯示錯誤。C#編碼問題

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

如果flag == 1,應該使用什麼'lat'?你聲明它並只在一個條件下設置它的值 –

+0

@ S.Serp我從Excel工作表的第一列讀取這些數據。如果我將在我的數據中獲得關鍵字「DATE」,它將被存儲在日期變量中,否則數據將被存儲在經緯度變量.'flag = string.Compare(excel_getValue(「A」+ i),「DATE」) ;'這是決定旗幟價值的陳述。 –

+0

獲取存儲我想要訪問它,但無法在循環外如果 –

回答

1

您需要了解一些有關範圍。您變量的範圍在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 
+0

我的答案有什麼問題? – Prabu

+0

在使用之前'lat'並不總是被設置爲一個值是主要問題,但還有很多。 – ClickRick

+0

@Prabu它的工作現在,所以可以得出結論,在初始化加上聲明變量爲空之外的if循環能夠訪問它在函數中的任何地方。 –

0

聲明內可變if條件上下文是不是變量的適當範圍way.The將只有條件裏面因此使用它以外將產生你喜歡「的名字LAT不存在的錯誤當前情境「。

  Void Somefunction() 
      { 

      string[] lat=null; 


      if(true) 
      { 
       lat=new string[10]; 
      lat[0]="welcome"; 
       } 
      Console.Writeline(lat[0]); 

      } 

儘管上面的代碼是正確的,但如果條件爲假而緯度將爲空,則會發生錯誤。

0

我想你錯過了這裏的大部分評論。您的代碼中顯示的lat變量僅存在於THAT if聲明中......只要您離開if聲明lat不再存在。如下圖所示:

else if (flag != 1) 
{ 
    string[] lat = excel_getValue("A" + i).Split(); 
} 
// lat DNE here 

即使你的if語句之前創建一個string[] lat;變量,編譯器會抱怨,因爲當你在if聲明後初始化lat變量,編譯器會抱怨,因爲有一種可能性,即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