Привет, я не уверен, что универсальный метод - верный способ решить мою проблему. Мне нужно проанализировать файл XML и прочитать элементы из него. Предметами могут быть такие вещи, как строки заказа, заметки, вложения. Основные шаги для получения этих предметов одинаковы. Как я могу создать 1 метод, который создает список этих элементов и вызывает определенный метод для чтения элемента?
public override IList<T> GetItems<T>(XPathNavigator currentOrder) where T : ISortableByLineNumber, new ()
{
var itemList = new List<T>();
var itemXmlNodes = currentOrder.Select(OrderXPath);
if (itemXmlNodes == null)
throw new Exception("");
var lineNumber = 1;
foreach (XPathNavigator itemXmlNode in itemXmlNodes)
{
var item = new T();
item = ReadItem(itemXmlNode, lineNumber++, item);
itemList.Add(item);
Logger.Debug(string.Format("Added item {0}", item));
}
return itemList;
}
Я думал, что смогу сделать это с помощью метода ReadItem. Я бы создавал перегрузки для каждого типа предметов, которые я бы читал.
private ISortableByLineNumber ReadItem(XPathNavigator itemXmlNode, int i, OrderLine item)
{
// specific code to read a orderLine
}
private ISortableByLineNumber ReadItem(XPathNavigator itemXmlNode, int i, Note item)
{
// specific code to read a note
}
Но когда я пытаюсь скомпилировать это, я могу получить «Наилучшее перегруженное совпадение методов для XmlOrderParser.XmlOrders.Prs3XmlFileWithOrders.ReadItem (System.Xml.XPath.XPathNavigator, int, XmlOrderParser.Entities.OrderLine ». Проблема в том, что компилятор не знает, как привести T к OrderLine или Note.