我有一个在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 :(得分:6)
第二个函数是静态的,变量仅存在于对象的上下文中。
答案 1 :(得分:5)
该方法是静态的。变量不是。您无法从静态方法中访问该类的非静态(实例)成员。类中的公共变量不是全局变量。你必须使它成为公共静态以使其全局化(不是我建议使用全局变量),例如:
public static int[] timeInfo = new int[2];
答案 2 :(得分:3)
您需要将其设置为静态,以便静态函数能够看到它。
答案 3 :(得分:1)
您还需要将变量定义为静态:
public static int[] timeInfo = new int[2];
答案 4 :(得分:1)
由于您的方法,您的变量必须是静态的。因为该方法是静态的,所以它只能看到静态变量。