Wpis z mikrobloga

Mirki z #csharp #programowanie. Mam taka metodę

public void readRobotNames()
{
robotPathList = System.IO.Directory.GetDirectories(robBCKPfolder);
robotList = robotPathList;
//Pobiera ostatni folder w ścieżce dostępu
for (int i = 0; i < robotList.Length;i++ )
{
robotList[i] = robotList[i].Split('\').Last();
}

}

Wszystko się rozbija o to, że po tej operacji zarówno zmienna robotPathList jak i zmienna robotList mają wartość tak jakby obie były splitowane? WTF? W czym jest błąd?
  • 9
  • Odpowiedz
@Hans_Olo: @zwykly_obywatel: masz dwie referencje do jednego obiektu. Zmienisz obiekt, wiec wszystko jest ok.
Potrzebujesz kopie obiektu jesli chcesz mieć "czysta" wersje.
Normalnie deepcopy potrzebne, ale ze stringi sa specjalne to starzy "zwykle"
  • Odpowiedz
@ogrod87: Tak, wiem. Zadanie polega na wyrwaniu ostatniego folderu w każdej ścieżce dostępu na tej liście stringów.
@zwykly_obywatel: @M4ks: Dzięki za naprowadzenie. Rozwiązanie wygląda tak:
public void readRobotNames()
{
robotPathList = System.IO.Directory.GetDirectories(robBCKPfolder);
Array.Resize(ref robotList, robotPathList.Length);
Array.Copy(robotPathList, 0, robotList, 0, robotPathList.Length);
for (int i = 0; i < robotList.Length;i++ )
{
robotList[i] = robotList[i].Split('\').Last();
}

}
  • Odpowiedz
@Hans_Olo: na cholerę w ogóle ci druga lista skoro z niej nie korzystasz? A dwa, robienie splita na systemie plików to głupota. Trzy - so do tego gotowe funkcje ;)
  • Odpowiedz
@M4ks: Uczę się dopiero, wiec nie wszystko jeszcze ogarniam. Korzystam, ale nie wszędzie. Jedna lista jest dla GUI, żeby użytkownik nie męczył się z całymi ścieżkami, a druga dla obsługi plików.
  • Odpowiedz
@Hans_Olo
Moglbys uzyc klasy DIrectoryInfo razem z linq, mniej wiecej tak :
var di = new DirectoryInfo(robBCKPfolder);
var robotPathList = di.GetDirectories();
var robotList = folders.Select(x=>x.Name);
  • Odpowiedz