我有一个程序,可以找到具有预定义间隔的两点之间的坐标:
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。但是,不知何故,我需要分别访问这些值。
非常感谢任何帮助。
答案 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
。