Универсальная функция с разными классами (с параметрами)? - PullRequest
0 голосов
/ 23 января 2012

Мой магический синтаксис будет выглядеть так:

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 Ответ

1 голос
/ 23 января 2012

Если ваши классы, Class1, Class2, Class3, все принимают словарь в качестве параметра конструктора, вы можете иметь их наследование от общего базового класса и использовать Activator.CreateInstance(typeof(T), NameValuePairs) для создания экземпляров ваших классов.

Если вы пойдете по этому пути, вы захотите установить общее ограничение where T : BaseClass и выполнить некоторую проверку ошибок / обработку исключений при создании типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...