索引到ArrayList的结果的InvalidCastException

Rya*_*wis 4 c# visual-studio-2008 visual-studio

我有一个ArrayList填充了一堆点,我想循环它们,所以我使用这个代码:

for (int i = 0; i < currentClicks.Count; i++)
{
    if (i > 0) // Skip the first click
    {
        clickPos = currentClicks[i];
        prevPos = currentClicks[i - 1];
    }
}
Run Code Online (Sandbox Code Playgroud)

我在clickPosprevPos线上得到这个错误:

Cannot implicitly convert type 'object' to 'System.Drawing.Point'.
An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我有clickPosprevPos定义如下:

private System.Drawing.Point clickPos;
private System.Drawing.Point prevPos;
Run Code Online (Sandbox Code Playgroud)

编辑

当我注释掉clickPosprevPos线并添加

MessageBox.Show(currentClicks[i].GetType().ToString());
Run Code Online (Sandbox Code Playgroud)

消息框说 System.Drawing.Point

Ano*_*on. 6

你应该使用泛型List<Point>而不是ArrayList.

如果您坚持使用ArrayList,则需要Point在检索时将对象强制转换为a :

clickPos = (Point)currentClicks[i];
Run Code Online (Sandbox Code Playgroud)

  • 亲爱的上帝,是的; 使用List <Point>.+1.在VS2008中使用ArrayList的唯一原因是为了与Settings文件兼容.此外,一旦你有List <Point>,用foreach循环而不是for循环迭代它. (2认同)