2012-05-17 37 views
0

我有一個C#中遞歸的函數,我想編輯一個全局變量(我認爲它是全局的,因爲它之前的公共)在函數外聲明。出於某種原因,我不知道它無法在該特定功能中看到公共變量。它可以在我的代碼中的第一個函數中看到它,但不是在第二個需要訪問它並更改它以節省很多時間打開很多文件的第二個函數...遞歸函數中的公共變量C#

是否有任何理由不可訪問?如果是這樣,我怎麼能解決它?

非常感謝!

public int[] timeInfo = new int[2]; 
    private void ListDirectory(TreeView treeView, string path) 
     {  
      treeView.Nodes.Clear(); 
      var rootDirectoryInfo = new DirectoryInfo(path);  
      treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); 
     } 

    private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) 

    { 

     var directoryNode = new TreeNode(directoryInfo.Name); 

     foreach (var directory in directoryInfo.GetDirectories()) 
      directoryNode.Nodes.Add(CreateDirectoryNode(directory)); 

     foreach (var file in directoryInfo.GetFiles())    
     { 

      int check =0;       
      try     
      { 

       string s = "";      
       s = directoryInfo.FullName + "\\" + file.Name;      
       List<string> row, row2, row3 = new List<string>(); 

       using (StreamReader readFile = new StreamReader(s)) 
       { 

        row = (readFile.ReadLine().Split(',').ToList()); 
        try 
        {       
         row2 = (readFile.ReadLine().Split(',').ToList()); 
         //timeInfo[0] = row2[0]; 
        } 
        catch { check = 1; } 
        try 
        { 
         row3 = (readFile.ReadLine().Split(',').ToList()); 
         //timeInfo[1] = row3[0]; 
        } 

        catch { } 
       } 

       TreeNode[] headerNodes = new TreeNode[row.Count]; 

       for (int i = 0; i < row.Count; i++) 
       { 

        headerNodes[i] = new TreeNode(row[i]); 
        if (check == 1) 
        {      
         headerNodes[i].BackColor = Color.Red; 
         headerNodes[i].ForeColor = Color.White; 
        } 

       } 
       directoryNode.Nodes.Add(new TreeNode(file.Name, headerNodes)); 
      } 
      catch 
      { 
       directoryNode.Nodes.Add(new TreeNode(file.Name)); 
      } 
     }   
     return directoryNode; 
    }  
+0

你準備用'timeInfo []'做什麼,因爲每次遞歸調用都會覆蓋值 –

回答

6

第二個函數是靜態的,變量只存在於對象的上下文中。

+0

我覺得自己像個白癡......根本沒有注意到。舊的C++習慣......謝謝! – Axxelsian

+2

不要......我們都在那裏。 –

5

該方法是靜態的。該變量不是。您無法從靜態方法中訪問該類的非靜態(實例)成員。類中的公共變量不是全局的。你必須讓公共靜態使其全球(不,我會永遠建議使用全局變量),如:

public static int[] timeInfo = new int[2]; 
3

您將需要使它以靜態爲你的靜態功能,才能看到它。

1

您需要定義您的變量爲靜態以及:

public static int[] timeInfo = new int[2]; 
1

您的變量必須因爲你的方法是靜態的。由於該方法是靜態的,它只能看到靜態變量。