Reflection: Indlæs properties fra text fil
Hej eksperterJeg har en klasse i min kode, der indeholder en masse autoproperties.
public class TransitionParameters
{
public double DestroyPctMin { get; set; }
public double DestroyPctMax { get; set; }
public int DestroyCntMin { get; set; }
// etc
}
Jeg har udført følgende besværgelser for at gemme værdien af alle properties i en tab separeret fil med en property på hver linie(PropertyName tab Value).
public void SaveToFile(string path)
{
StreamWriter writer = new StreamWriter(path);
foreach (PropertyInfo pi in GetType().GetProperties())
writer.WriteLine(pi.Name + "\t" + pi.GetValue(this, null));
writer.Flush();
writer.Close();
}
Det ser ud til at virke efter hensigten
Mit problem opstår, når jeg gerne vil læse værdierne ind igen næste gang programmet startes. Jeg har forsøgt mig med følgende:
public void LoadFromFile(string path)
{
StreamReader reader = new StreamReader(path);
string line;
while ((line = reader.ReadLine()) != null)
{
string[] splitLine = line.Split(new string[1] { "\t" }, StringSplitOptions.None);
string name = splitLine[0];
string value = splitLine[1];
GetType().GetProperty(name).SetValue(this, value, null);
}
reader.Close();
}
Men SetValue metoden er ikke glad for at sætte værdien af eksempelvis DestroyPctMin, der er en Double property, med feltet value, der er en string.
Den dør med en ArgumentException:
Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Double'.
Hvad kan jeg gøre for at ovenstående besværgelser kan virke efter hensigten?