У меня есть требование упорядочить несколько списков по одному значению. Но по какой-то причине эти списки содержат объекты разных типов, которые разделяют это значение. Давайте назовем это ChildID .
Упрощенный код модели будет выглядеть примерно так:
public class Child
{
public string ChildID { get; set; }
}
public class Parent
{
public Child Child { get; set; }
}
public class OtherClassID
{
public int ID { get; set; }
public string ChildID { get; set; }
}
public class SomeOtherClass
{
public OtherClassID ID { get; set; }
}
Итак, чтобы избежать дублирования кода, я попробовал это:
public interface IHasChildID
{
string GetChildID();
}
public class Child : IHasChildID
{
public string ChildID { get; set; }
public string GetChildID()
{
return ChildID;
}
}
public class Parent : IHasChildID
{
public Child Child { get; set; }
public string GetChildID()
{
return Child.ChildID;
}
}
public class OtherClassID
{
public int ID { get; set; }
public string ChildID { get; set; }
}
public class SomeOtherClass : IHasChildID
{
public OtherClassID ID { get; set; }
public string GetChildID()
{
return ID.ChildID;
}
}
И когда я создал вспомогательный класс с вспомогательным методом, который принимает интерфейс в качестве параметра, я ожидал, что он будет работать:
public static class ChildOrderHelper
{
public static IEnumerable<IHasChildID> OrderChildren(IEnumerable<IHasChildID> children)
{
var childrenList = children.ToList();
//do some splitting, ordering and conatenation of lists
return orderedList;
}
}
Но при каждом вызове помощника я получаю сообщение об ошибке:
List<Child> originalList = GetChildren(); // whatever
// some lines of code
var orderedList = ChildOrderHelper.OrderChildren(originalList).ToList(); // error
Ошибка CS1503 Аргумент 1: невозможно преобразовать из
'System.Collections.Generic.List ' для
'System.Collections.Generic.List '
И так для каждого вызова помощника, независимо от типа.
Следует отметить, что я привел пример с тремя различными типами, которые имеют это значение и должны быть упорядочены им. В проекте, вероятно, 10 или более.
Полагаю, есть кое-что фундаментальное, что я еще не понимаю в использовании интерфейса, но любая помощь будет полезна в этом вопросе.