2012-01-22 59 views
0

我的魔法語法是這樣的:具有不同類的通用函數(帶參數)?

public List<T> LoadItems(string fileName) where T : new (Dictionary<string,string>) 
{ 
    ... 
    List<T> List = new List<T>(); 
    while(reader.peek() != -1) 
    { 
     Dictionary<string, string> NameValuePairs = new Dictionary<string,string>(); 
     ... 
     //parse file and load dictionary with name value pairs 
     ... 
     List.Add(new T(NameValuePairs)); 

    } 
} 

然後我想能夠調用這樣這個函數...

public List<Class1> LoadClass1() 
{ 
    return LoadItems<Class1>("file1.csv"); 
} 

public List<Class2> LoadClass1() 
{ 
    return LoadItems<Class2>("file2.csv"); 
} 

public LisT<Class3> LoadClass1() 
{ 
    return LoadItems<Class3>("file3.csv"); 
} 

我知道這不可能像做這個,但有沒有辦法實現這樣的作品,也許使用我的三個類的接口?

+0

我假設你有一個理由從csv讀取名稱/值對,但可以肯定的是:有更容易(即.Net支持)的方式來反序列化對象。 –

+0

我可能最終會做一些不同的事情,並將CSV文件用作「端點」。我會研究它。 –

回答

1

如果您的類Class1,Class2,Class3都將字典視爲構造函數參數,則可以讓它們從公共基類繼承,並使用Activator.CreateInstance(typeof(T), NameValuePairs)來創建類的實例。

如果你走這條路線,你會想讓你的通用約束where T : BaseClass,並做一些錯誤檢查/異常處理你的類型創建。

+0

正是我需要的。謝謝。 –

相關問題