2016-04-22 70 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