2016-04-22 16 views
0

私は、ファイルを読み込み、このファイルの情報に基づいてモデルのリストを作成するメソッドを持っています。 Currenly私が読んでいるファイルは、私はこのコードでserverModelのリストに移入されserverDataが含まれていますタイプに基づいてジェネリッククラスのリストを設定するにはどうすればよいですか?

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

をそれが必要です。

私は、コード内でこのチェックを追加しました:

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

しかし、私は

がにserverModelから変換できません取得:

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

とモデルにデータを追加しようとしましたT

これはどのように行われますか?

+1

サイドノート: 'キャッチ(例外e){投げます。 } 'は* redundant *なので、*役に立たない*の理由です。 –

+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

hmmm、それはうまくいくかもしれません。現在のところ、モデルにはカスタムコンストラーがありませんが、これは機能するかもしれません。それを試してみてください – ThunD3eR