Ich versuche, eine Liste von Objekten in einem Consturctor für eine IntersectionPath der Ableitungsklasse wie folgt zu werfen.Warum funktioniert Explicit Cast für generische Liste nicht
public class IntersectionPath : Path<IntersectionSegment>, IEnumerable
{
//Constructors
public IntersectionPath() : base() { Verts = null; }
public IntersectionPath(List<Intersection> inVerts, List<Segment<Node>> inEdges) : base()
{
this.Segments = (List<IntersectionSegment>) inEdges;
}
}
Segmente werden in dem generischen Basisklasse Pfad definiert
public class Path<T> : IEnumerable<T> where T : Segment<Node>
{
//public properties
public List<Direction> Directions {get; set; }
public List<T> Segments { get; set; }
}
Ich habe einen expliziten Operator für die Besetzung in der IntersectionSegment Klasse definiert (siehe unten und ist so unklar, warum wird dies nicht .. kompiliert ich eine Fehlermeldung für das Gießen im IntersectionPath Konstruktor
public class IntersectionSegment : Segment<Intersection>
{
//curves which intersect the primary curve at I0(Start Node) and I1(End Node)
public Curve C0 { get; set; }
public Curve C1 { get; set; }
public IntersectionSegment():base() {}
public IntersectionSegment(Intersection n0, Intersection n1):base(n0,n1){}
public static explicit operator IntersectionSegment(Segment<Node> s)
{
if ((s.Start is Intersection) && (s.End is Intersection))
{
return new IntersectionSegment(s.Start as Intersection,s.End as Intersection);
}
else return null;
}
public static explicit operator List<IntersectionSegment>(List<Segment<Node>> ls)
{
List<IntersectionSegment> lsout = new List<IntersectionSegment>();
foreach (Segment<Node> s in ls)
{
if ((s.Start is Intersection) && (s.End is Intersection))
{
lsout.Add(new IntersectionSegment(s.Start as Intersection,s.End as Intersection));
}
else return null;
}
return lsout;
}
Segment wird definiert als:
public class Segment <T> : Shape where T : Node
{
//generic properties
public T Start { get; set; }
public T End { get; set; }
}
Sie haben eine Menge Code - können Sie versuchen, es auf ein kurzes, aber vollständiges Programm zu reduzieren? –
Ich merke, dass .... Ich habe gerade in früheren Posts gefunden, ich werde für mehr Code gefragt! : -s – gwizardry
Sie werden in der Regel für mehr gefragt, wenn Sie nicht * vollständigen * Code gegeben haben, aber kurz und vollständig ist in der Regel gut ... –