2011-06-04 45 views
1

我想調用這些函數來擺脫我不需要的東西,但是我的代碼似乎在擊敗我,我開始認爲這是一場徒勞的鬥爭。我已經嘗試了多種方法來解決這兩個最後的錯誤,但是IEnumerator卻給了我通配符。錯誤是在線路: 如果(enumerator2是IDisposable接口) 和 如果(枚舉是IDisposable接口)清理IDisposable問題

 try 
     { 
      enumerator = matchs.GetEnumerator(); 
      while (enumerator.MoveNext()) 
      { 
       IEnumerator enumerator2; 
       Match current = (Match) enumerator.Current; 
       num = 0; 
       try 
       { 
        enumerator2 = current.Groups.GetEnumerator(); 
        while (enumerator2.MoveNext()) 
        { 
         Group group = (Group) enumerator2.Current; 
         strArray[num, num3] = group.Value; 
         num++; 
        } 
       } 
       finally 
       { 
        if (enumerator2 is IDisposable) 
        { 
         (enumerator2 as IDisposable).Dispose(); 
        } 
       } 
       if (num2 < num3) 
       { 
        num2 = num3; 
       } 
       num3++; 
      } 
     } 
     finally 
     { 
      if (enumerator is IDisposable) 
      { 
       (enumerator as IDisposable).Dispose(); 
      } 
     } 
     strArray[num, 0] = Conversions.ToString((int) (num2 + 1)); 
     return strArray; 
    } 

編輯 - 特定錯誤消息: 使用未分配的局部變量「enumerator2」
使用未分配的本地的的變量'enumerator'

+1

您需要發佈特定的錯誤消息 – 2011-06-04 02:51:19

+1

是否有您所使用的枚舉,而不是直接用更地道'foreach'環理由嗎?另外,請查看'using'語句。 – 2011-06-04 02:52:21

+0

行'(枚舉器2作爲IDisposable).Dispose();'可能是一個問題。它基本上意味着「在枚舉器2上調用Dispose,如果它是一次性的,否則調用Dispose爲null」。如果你使用正確的語法,(((IDisposable)enumerator2).Dispose()',你的工具會更快樂。 – 2011-06-04 02:56:07

回答

1

您應該使用foreach環路被別人指出。

,你得到這個錯誤的原因是因爲當enumerator2finally塊時,編譯器無法知道它被設置爲某個值(因爲它可能不會在某些特殊情況下)。您可以按原樣,這樣做修復您的代碼:

IEnumerator enumerator2 = null; 
Match current = ... 
+0

這是我爲這個問題所需要的確切答案,即使它不是最有效的方法。 – Danejir 2011-06-05 04:39:00