2016-04-22 35 views
0

我有一個方法讀取文件並根據此文件的信息填充模型列表。 Currenly我讀的文件包含serverData我填充到serverModel列表與此代碼:如何根據類型填充泛型類的列表?

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; 
} 

現在我有一個包含MAILDATA我想填充MAILDATA的列表,並返回一個新的文件。

我修改了代碼,使用泛型類,像這樣:我無法弄清楚如何填充MAILDATA列表時,我需要和如何填充serverdata列表

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; 
} 

現在,當我需要。

我在代碼中添加了這個檢查:

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

並試圖將數據添加到模型:

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

,但我得到

無法從serverModel轉換爲T

這是如何完成的?

+1

旁註:'趕上(例外五){拋出; }'是*多餘*,這就是爲什麼*無用*。 –

+0

throw被註釋掉,解析錯誤時添加代碼,謝謝 – ThunD3eR

回答

1

試試這個:

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

models.Add(obj); 

編輯:

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

如何將值分配給ServerModel中的正確屬性? – ThunD3eR

+0

假設這是它們在構造函數中的正確順序。 –

+0

嗯,這可能工作。目前該模型沒有自定義構件,但這可能會起作用。我試試吧 – ThunD3eR