У меня есть собственный класс CurvePoint
, который я определяю набор элементов данных для рисования на экране, используя DrawCurve
Я написал процедуру приведения для преобразования CurvePoint в Point, но я получаю ошибку
Как минимум один элемент в исходном массиве не может быть приведен к типу целевого массива. , когда я пытаюсь использовать метод .ToArray в Arraylist
Я могу хорошо разыграть объекты, используя код:
Point f = new CurvePoint(.5F, .5F, new Rectangle(0, 0, 10, 10));
но если происходит сбой при использовании
Point[] Plots=(Point[])_Data.ToArray(typeof(Point));
(где _Data - ArrayList, который заполнен 5 объектами CurvePoint)
Вот полный код:
public partial class Chart : UserControl
{
ArrayList _Data;
public Chart()
{
InitializeComponent();
_Data = new ArrayList();
_Data.Add(new CurvePoint(0f, 0f,this.ClientRectangle));
_Data.Add(new CurvePoint(1f, 1f, this.ClientRectangle));
_Data.Add(new CurvePoint(.25f, .75f, this.ClientRectangle));
_Data.Add(new CurvePoint(.75f, .25f, this.ClientRectangle));
_Data.Add(new CurvePoint(.5f, .6f, this.ClientRectangle));
}
private void Chart_Paint(object sender, PaintEventArgs e)
{
_Data.Sort();
e.Graphics.FillEllipse(new SolidBrush(Color.Red),this.ClientRectangle);
Point[] Plots=(Point[])_Data.ToArray(typeof(Point));
e.Graphics.DrawCurve(new Pen(new SolidBrush(Color.Black)), Plots);
}
}
public class CurvePoint : IComparable
{
public float PlotX;
public float PlotY;
public Rectangle BoundingBox;
public CurvePoint(float x, float y,Rectangle rect)
{
PlotX = x; PlotY = y;
BoundingBox = rect;
}
public int CompareTo(object obj)
{
if (obj is CurvePoint)
{
CurvePoint cp = (CurvePoint)obj;
return PlotX.CompareTo(cp.PlotX);
}
else
{ throw new ArgumentException("Object is not a CurvePoint."); }
}
public static implicit operator Point(CurvePoint x)
{
return new Point((int)(x.PlotX * x.BoundingBox.Width), (int)(x.PlotY * x.BoundingBox.Height));
}
public static implicit operator string(CurvePoint x)
{
return x.ToString();
}
public override string ToString()
{
return "X=" + PlotX.ToString("0.0%") + " Y" + PlotY.ToString("0.0%");
}
}
Может кто-нибудь подсказать, как исправить код?