具有不同类(带参数)的通用函数?

时间:2012-01-22 20:14:50

标签: c# generics c#-4.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");
}

我意识到这不能像这样做,但有没有办法实现这样的工作,也许使用我的三个类的接口?

1 个答案:

答案 0 :(得分:1)

如果您的类Class1,Class2,Class3都将字典作为构造函数参数,您可以让它们从公共基类继承并使用Activator.CreateInstance(typeof(T), NameValuePairs)创建类的实例。

如果你走这条路线,你会想要制作通用约束where T : BaseClass,并围绕你的类型创建做一些错误检查/异常处理。