2016-04-22 13 views
0

Ich habe eine Methode, die eine Datei liest und eine Liste eines Modells basierend auf den Informationen dieser Datei auffüllt. Currenly die Datei Ich lese enthält Serverdaten, die ich auf eine Liste von serverModel bevölkern mit diesem Code:Wie wird eine Liste einer generischen Klasse basierend auf dem Typ aufgefüllt?

public static List<ServerModel> GetServerModels() 
{ 
    List<ServerModel> models = new List<ServerModel>(); 

    try 
    { 
     var reader = new StreamReader(Helper.GetPath("Domains.ini"), Encoding.Default); 


     while (!reader.EndOfStream) 
     { 
      try 
      { 
       var line = reader.ReadLine(); 

       string[] info = line.Split(';'); 

       //if(info.Count > 1) 
       models.Add(new ServerModel { 
        DomainName = info[1], 
        ServerUrl = info[3], 
        StatisticUrl = info[5] }); 
      } 
      catch (Exception e) 
      { 

      } 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 

    } 
    return models; 
} 

Jetzt habe ich eine neue Datei, die Maildata enthält, die ich eine Liste von maildata auffüllen möchten und es zurück.

modifizierte ich den Code wie so generische Klassen zu verwenden:

public List<T> GetModeldata<T>(string path) 
{ 
    List<T> models = new List<T>(); 

    try 
    { 
     var reader = new StreamReader(path, Encoding.Default); 


     while (!reader.EndOfStream) 
     { 
      try 
      { 
       var line = reader.ReadLine(); 

       string[] info = line.Split(';'); 

       if(typeof(T) == typeof(ServerModel)) 
        models.Add(new ServerModel { 
         DomainName = info[1], 
         ServerUrl = info[3], 
         StatisticUrl = info[5] }); 
      } 
      catch (Exception e) 
      { 
       throw; 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 

    } 
    return models; 
} 

jetzt nicht herausfinden, ich kann, wie eine Liste von maildata zu füllen, wenn ich, dass und wie muß eine Liste von Serverdaten zu füllen, wenn ich brauche das.

Ich habe diese Überprüfung im Code:

if(typeof(T) == typeof(ServerModel)) 

und versuchte, Daten zum Modell hinzuzufügen:

models.Add(new ServerModel { 
    DomainName = info[1], 
    ServerUrl = info[3], 
    StatisticUrl = info[5] }); 

Aber ich

von serverModel konvertieren kann nicht zu bekommen T

Wie wird das gemacht?

+1

Randbemerkung: 'catch (Exception e) {throw; } 'ist * redundant * und deshalb * nutzlos *. –

+0

throw ist auskommentiert, Parsing Fehler, wenn Code hinzugefügt wurde, danke – ThunD3eR

Antwort

1

Versuchen Sie folgendes:

T obj = (T)Activator.CreateInstance(typeof(T), 
            new object[]{ info[1], info[3], info[5]}); 

models.Add(obj); 

Edited:

// Also you can just cast to T: 
models.Add((T)(object)(new ServerModel { 
    DomainName = info[1], 
    ServerUrl = info[3], 
    StatisticUrl = info[5] })); 
+0

Wie wird das Werte an die richtige Eigenschaft im ServerModel? – ThunD3eR

+0

Angenommen, dies ist ihre korrekte Reihenfolge im Konstruktor. –

+0

hmmm, das könnte funktionieren. Zur Zeit hat das Modell keinen benutzerdefinierten Konstruktor, aber das könnte funktionieren. Ill versuchen Sie es – ThunD3eR