Variable pública en función recursiva C#
Frecuentes
Visto 1,423 equipos
0
Tengo una función que es recursiva en C# y quiero editar una variable global (supongo que es global debido al público anterior) declarada fuera de la función. Por alguna razón que desconozco, no puede ver la variable pública dentro de esa función específica. Puede verlo en la primera función en mi código, pero no en la segunda donde necesito acceder y cambiarlo para ahorrar MUCHO tiempo abriendo MUCHOS archivos...
¿Hay alguna razón por la que no sería accesible? y si es así, ¿cómo puedo evitarlo?
Muchas gracias de antemano!
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;
}
5 Respuestas
6
La segunda función es estática y la variable existe solo en el contexto de un objeto.
contestado el 17 de mayo de 12 a las 20:05
No... todos hemos estado allí. - otávio décio
5
El método es estático. La variable no lo es. No puede acceder a miembros no estáticos (de instancia) de la clase desde dentro de un método estático. Una variable pública en una clase no es global. Debe hacerlo público estático para que sea global (no es que recomendaría usar variables globales), como:
public static int[] timeInfo = new int[2];
contestado el 17 de mayo de 12 a las 20:05
3
Debería hacerlo estático para que su función estática lo vea.
contestado el 17 de mayo de 12 a las 20:05
1
También debe definir su variable como estática:
public static int[] timeInfo = new int[2];
contestado el 17 de mayo de 12 a las 20:05
1
Su variable debe ser estática debido a su método. Debido a que el método es estático, solo puede ver variables estáticas.
Respondido el 20 de junio de 12 a las 13:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# recursion treeview global-variables treenode or haz tu propia pregunta.
¿Qué vas a hacer exactamente con
timeInfo[]
ya que cada llamada recursiva sobrescribirá los valores - Sam Holder