向for循环中的PointF数组添加值时,“预期值为常量”错误

时间:2014-01-09 00:24:19

标签: c# arrays for-loop

我是C#编程的新手。我的项目有困难。这就是事情。 - 我有一个 MCvBox2dD 名称列表 lstRectangles - 我希望得到每个方框的中心,并将其全部放在名为center的 PointF 数组中。

这是我的代码:

        List<MCvBox2D> lstRectangles; // stores data of detected boxes
        ...

        int size = lstRectangles.Count(); //total boxes detected
        PointF[] center = null; //array of PointF where I want to transfer the center of each detected boxes

        for (int j = 0; j < lstRectangles.Count(); j++) 
        {
            center = new PointF[j] // here is the error, "A constant value is expected"
            {
                new PointF(lstRectangles[j].center.X , lstRectangles[j].center.Y)
            };

        }

2 个答案:

答案 0 :(得分:1)

在这种情况下,您既指定了数组的确切大小,又指定了组成数组的元素集。 C#必须选择其中一个值作为数组的大小。在这种情况下,j不是常量,因此它无法验证这两个数字是否匹配并且它发出错误。

要解决此问题,只需删除size参数,让C#根据您使用的元素数量推断出大小

center = new PointF[]
{
  new PointF(lstRectangles[j].center.X , lstRectangles[j].center.Y)
};

根据上下文,虽然看起来你真正想要做的是在PointF的数组中分配一个新的j。如果是,那么请执行以下操作

center[j] = new PointF(lstRectangles[j].center.X , lstRectangles[j].center.Y);

答案 1 :(得分:0)

首先,您需要声明PointF数组的大小(等于lstRectangle元素)
然后,将新的PointF添加到数组的正确语法如下

    int size = lstRectangles.Count(); 
    PointF[] center = new PointF[size];
    for (int j = 0; j < lstRectangles.Count(); j++) 
    {
        center[j] = new PointF(lstRectangles[j].center.X , lstRectangles[j].center.Y)
    }

但是,我建议使用List<PointF>

,而不是使用数组
    List<PointF> center = new List<PointF>();
    foreach(MCvBox2D box in lstRectangles) 
    {
        center.Add(new PointF(box.center.X , box.center.Y));

    }