如何根据类型填充泛型类的列表

本文关键字:泛型类 列表 填充 类型 何根 | 更新日期: 2024-11-07 10:20:44

>我有一个方法,可以读取文件并根据该文件的信息填充模型列表。目前,我正在读取的文件包含服务器数据,我使用以下代码将其填充到服务器模型列表中:

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

现在我有一个包含邮件数据的新文件,我想填充邮件数据列表并返回它。

我修改了代码以使用泛型类,如下所示:

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

但我得到

无法从服务器模型转换为 T

这是怎么做到的?

如何根据类型填充泛型类的列表

试试这个:

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