У меня есть общая коллекция Path, где T - это сегмент, а сегмент - это абстрактный класс.У меня есть производный класс ClosedPath of Path, который содержит производные классы SpecialLineSegments из абстрактного базового класса Segment через промежуточный класс LineSegment.Я пытаюсь выбрать путь, который удовлетворяет условию, и затем я изменю его так, чтобы он мог содержать разные типы сегментов и больше не являлся ClosedPath .... поэтому я пытаюсь привести к Path.Компилятор выдает ошибку, что это приведение невозможно.
public static void Method1(ClosedPath[] paths)
{
bool condition = false;
//working code..
Path<Segment> Pslct = new Path<Segment>();
foreach (ClosedPath P in paths)
{
if (condition)
{
//working code
Pslct = (Path<Segment>) P;
}
}
}
Путь определяется следующим образом ...
public class Path<T> : IEnumerable<T> where T : Segment
{
private List<T> segments = new List<T>();
public List<T> Segments
{
set { segments = value;}
get { return this.segments; }
}
public T this[int pos]
{
get { return (T)segments[pos]; }
set { segments[pos] = value; }
}
public Path()
{
this.Segments = new List<T>();
}
public Path(List<T> s)
{
this.Segments = s;
}
public void AddSegment(T s) {Segments.Add(s);}
public int Count {get {return Segments.Count;}}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{ return Segments.GetEnumerator();}
IEnumerator IEnumerable.GetEnumerator()
{ return Segments.GetEnumerator(); }
}
ClosedPath, полученный из
public class LinePath<T> : Path<T>, IEnumerable<T> where T : LineSegment
{
//working code
}
LineSegment происходит от сегмента