0

関数の外部で宣言されたグローバル変数(パブリックのためにグローバルであると想定)を編集したいC#で再帰的な関数があります。私が知らない何らかの理由で、その特定の関数内のパブリック変数を見ることができません。それは私のコードの最初の関数でそれを見ることができますが、私がそれにアクセスしてそれを変更してたくさんのファイルを開く時間を節約する必要がある2番目の関数では見ることができません...

アクセスできない理由はありますか?もしそうなら、どうすればそれを回避できますか?

よろしくお願いします!

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; 
    }     
4

5 に答える 5

6

2番目の関数は静的であり、変数はオブジェクトのコンテキストにのみ存在します。

于 2012-05-17T19:05:37.423 に答える
5

メソッドは静的です。変数はそうではありません。静的メソッド内からクラスの非静的(インスタンス)メンバーにアクセスすることはできません。クラスのパブリック変数はグローバルではありません。グローバルにするには、パブリック静的にする必要があります(グローバル変数の使用をお勧めするわけではありません)。

public static int[] timeInfo = new int[2];
于 2012-05-17T19:06:00.557 に答える
3

静的関数で表示するには、静的にする必要があります。

于 2012-05-17T19:06:05.567 に答える
1

変数も静的として定義する必要があります。

public static int[] timeInfo = new int[2];
于 2012-05-17T19:07:07.967 に答える
1

メソッドのため、変数は静的である必要があります。メソッドは静的であるため、静的変数のみを表示できます。

于 2012-06-20T12:59:26.430 に答える