2013-03-22 94 views
4

下面的函數產生錯誤,「未分配的局部變量‘intLast’的運用。我不知道我做錯了。錯誤與局部變量

static string RemovePath(string strInput) 
    { 

     int intLast; 

     for (int i = 1; i < strInput.Length; i++) 
     { 
      if (strInput.Substring(i, 1) == @"\") 
      { 
       intLast = i; 
      } 
     } 

     string strOutput = strInput.Substring(strInput.Length - intLast); 

     return strOutput; 
    } 
+1

這不會刪除使循環冗餘的第一個路徑部分嗎?僅供參考有實用功能,如'System.IO.Path.GetFileName()' – 2013-03-22 11:57:50

+0

System.IO.Path.GetFileName()要容易得多!謝謝! – TroggleDorf 2013-03-22 12:48:00

回答

2

您使用的是可變​​在下面一行:

string strOutput = strInput.Substring(strInput.Length - intLast); 

但變量將只在一定條件下(strInput.Length > 1strInput.Substring(i, 1) == @"\")的值。爲此,錯誤。

爲了解決這個問題提供了聲明中的缺省值:

int intLast = 0; // or any default value.

+0

謝謝!有效! – TroggleDorf 2013-03-22 12:10:55

0

初始化​​一些價值作爲環能不保證該值被指定爲循環的執行決定運行。

int intLast = 0; 

下面的幾行是要求未分配的變量控制可能不會進入循環分配的值。

string strOutput = strInput.Substring(strInput.Length - intLast); 
0

由於您僅在條件內部指定​​,因此從編譯器的角度來看,您可以在不初始化的情況下使用它。

即使您不希望曾經使用過,您應該在開始時將它初始化爲某個默認值。

int intLast = 0 
0

您需要爲​​指定一個默認值。

試試這個:

static string RemovePath(string strInput) 
{ 
    int intLast = 0; 

    for (int i = 1; i < strInput.Length; i++) 
    { 
     if (strInput.Substring(i, 1) == @"\") 
     { 
      intLast = i; 
     } 
    } 

    string strOutput = strInput.Substring(strInput.Length - intLast); 

    return strOutput; 
} 
0

只需編輯

int intLast = 0; 

整個代碼看起來就像這樣:

靜態字符串RemovePath(字符串strInput) { INT intLast = 0;

for (int i = 1; i < strInput.Length; i++) 
    { 
     if (strInput.Substring(i, 1) == @"\") 
     { 
      intLast = i; 
     } 
    } 

    string strOutput = strInput.Substring(strInput.Length - intLast); 

    return strOutput; 
} 

您剛剛必須將​​初始分配爲零。

0

你應該初始化你的​​變量。

編譯器不知道像​​這樣的變量將被分配,無論如何。

int intLast = 0; 
0

你應該初始化像

int intLast = 0; 

您的變量,因爲它可能會保持未分配狀態,如果它的代碼不是如果條件達到。