分数的Arraylist

时间:2011-09-09 06:01:01

标签: c# generics arraylist point

我有一个程序,可以找到具有预定义间隔的两点之间的坐标:

    ArrayList<Point> genPoints(double smallDist, Point a, Point b)
    {
        ArrayList<Point> outputPoints = new ArrayList<Point>();
        double distAB = dist2Points(a, b);

        if (smallDist > distAB)
            return null;

        int numGeneratedPoints = (int)(distAB / smallDist);

        Vector vectorBA = b - a;
        vectorBA.Normalize();
        Point currPoint = a;
        for (int i = 0; i < numGeneratedPoints; i++)
        {
            currPoint = currPoint + vectorBA * smallDist;
            if (dist2Points(currPoint, b) != 0)
                outputPoints.Add(currPoint);
        }

        return outputPoints;
    }

现在我使用以下代码调用该方法,其中我传递两个点P1,P2和预定距离。

gp = genPoints(1, p1, p2) 

当我想显示值时,它给出了以下内容:

4.94974746830583,4.94974746830583
 5.65685424949238,5.65685424949238
 6.36396103067893,6.36396103067893
 7.07106781186548,7.07106781186548
 7.77817459305202,7.77817459305202

for (int i = 0; i < gp.Count; i++)
    System.Console.WriteLine(" " + gp[i]);

我不知道如何单独访问这些值。我甚至不能使用gp [i] .x或gp [i] .y。但是,不知何故,我需要分别访问这些值。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

问题是您使用的是非通用集合ArrayList。索引器只是返回object,所以你必须强制转换:

Point p = (Point) gp[i];
// Now you can use p.x etc

如果您使用的是.NET 2或更高版本,最好使用List<T>之类的通用集合 - 让您的方法返回List<Point>并且您将能够编写:

Point p = gp[i];

......不需要演员表。

泛型有许多好处 - 除非你强制使用非泛型集合(例如,你正在为.NET 1.1编写代码),你应该完全避免它们和< em>总是使用通用集合。

顺便说一下,方法通常以.NET中的大写字母开头 - 所以我会将此方法命名为GeneratePoints