Witam, mam interface który pomaga mi przy zapisie i odczycie dzięki funkcjom która zamienia obiekt do lini CSV, oraz funkcji która zamienia linię CSV na obiekt.
Funkcja która zapisuje wygląda tak:
public static void SaveToFile(this List<ISaveable> data, string filename)
{
List<string> lines = new List<string>();
string path = Path.Combine(AppConfig.AppDataFolder, filename);
foreach (ISaveable item in data)
{
lines.Add(item.ToCSV());
}
File.WriteAllLines(path, lines);
}
Teraz chciałbym zrobić funkcję która z pliku czyta:
public static List<ISaveable> ReadFromFile(this string filename)
{
List<ISaveable> result = new List<ISaveable>();
string path = Path.Combine(AppConfig.AppDataFolder, filename);
if (!File.Exists(path))
{
return result;
}
List<string> input = File.ReadAllLines(path).ToList();
foreach (var item in input)
{
result.Add((Klasa do ktorej chce zapisac).FromCSV(item));
}
return result;
problem jest taki, że muszę wiedzieć w funkcji do jakiej konkretnie klasy chcę zapisać i nie wiem jak to zrobić.
Jedna z opcji o ktorych mysle to przekazanie obiektu klasy do ktorej chce zapisac:
public static List<ISaveable> ReadFromFile(this string filename, ISaveable saveTo)
{
List<ISaveable> result = new List<ISaveable>();
string path = Path.Combine(AppConfig.AppDataFolder, filename);
if (!File.Exists(path))
{
return result;
}
List<string> input = File.ReadAllLines(path).ToList();
foreach (var item in input)
{
result.Add(saveTo.FromCSV(item));
}
return result;
}
Jednak nie lubię tego rozwiązania. Istnieje jakiś inny sposób? Szukałem w google w jaki sposób funkcja może użyć metod klasy do której przekazuje return ale nic nie znalazłem.