如何根据类型填充通用 class 的列表?

How to populate a list of a generic class based on type?

我有一种方法可以读取文件并根据该文件的信息填充模型列表。目前我正在阅读的文件包含 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 的新文件,我想填充一个邮件数据列表并 return 它。

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

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

但我明白了

Can not convert from serverModel to 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] }));