일반 콜렉션 경로가 있습니다. 여기서 T는 세그먼트 - 세그먼트는 추상 클래스입니다. 중간 클래스 LineSegment를 통해 추상 기본 클래스 Segment의 파생 클래스 SpecialLineSegments가 포함 된 Path의 파생 클래스 ClosedPath가 있습니다. 조건을 만족하는 경로를 선택하려고하고 있는데 다른 유형의 세그먼트가 포함되어 있으므로 더 이상 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
}
선분에서 파생 된 ... 정의 당신은 Path<Segment>
에 ClosedPath
(Path<LineSegment>
)에서 캐스팅 할 수없는 세그먼트
어떻게 경로가 정의? –
@James 위에 편집 됨 – gwizardry
명시 적 변환 연산자를 작성하십시오. – phoog