这个清单创造了什么?

时间:2012-12-13 18:38:54

标签: c# list

我正在尝试理解我们今天在课堂上编写的一些代码,我们在下面创建了一个类,

    class Datapoint
    {
        private string latitude;
        private string longtitude;
        private string elevation;

        public Datapoint()
        {
            latitude = "no data";
            longtitude = "no data";
            elevation = "no data";
        }

        public Datapoint(string latitude, string longtitude, string elevation)
        {
            this.latitude = latitude;
            this.longtitude = longtitude;
            this.elevation = elevation;
        }

        public string Latitude { get { return latitude; } }
        public string Longtitude { get { return longtitude; } }
        public string Elevation { get { return elevation; } }
    }

然后从这个班级列出一个列表,

List<Datapoint> datapoints; 

这是一个列表

latitude 
longtitude
elevation
latitude 
longtitude
elevation
latitude 
longtitude
elevation
latitude 
longtitude
elevation

依旧等等?谢谢你的帮助。

5 个答案:

答案 0 :(得分:2)

该列表存储Datapoint个对象。它没有纬度,经度,海拔等的顺序。您可以从列表中获取Datapoint对象,然后按照您选择的顺序获取纬度,经度,海拔:

Datapoint myPoint = datapoints[0];
Console.WriteLine(myPoint.latitude);
//etc for which ever measurement you want

答案 1 :(得分:2)

您似乎将Datapoint类视为本身一种列表结构。虽然你可以以这种方式思考它,但这并不是大多数程序员想象它的方式。

更容易理解的实体可能是一个人。你是否认为一个人是列表,就像这样?

  • 年龄
  • 性别
  • 高度
  • 重量
  • 头发颜色
  • 眼睛颜色

......等等?我想不是。一个人有许多属性或属性;但是如果你考虑一个人的列表,这个列表不仅仅是人物属性的连接序列,而是个人实体(或实例)。

正如其他人所指出的那样,List<Datapoint>Datapoint个对象列表不仅仅是这些对象属性的列表,而且实际上是对象本身的列表(每个对象)其中有属性)。


在较低级别,如果您询问存储这些信息的方式,那么您实际上已经关闭了。显然,对于要在内存中分配的Datapoint对象,必须有所有属性的空间;这些很可能会被分配到一个连续的块中(虽然此时我们已达到一定程度的实现细节,大多数开发人员认为你甚至不应该考虑编写软件的目的 - 这是另一个讨论我会除了别人!)。

现在,您可能会认为存储一个Datapoint对象列表是有意义的,就像您建议的那样:

latitude  // first object
longitude
elevation
latitude  // second object
longitude
elevation
...       // etc.

但是,正如您可能已经在课堂上学到的那样,引用类型不会以这种方式存储在.NET中。给定一组对象,每个实例可以存储在任何地方;你在List<Datapoint>中拥有的实际上是对这些对象的一堆引用,就像我有这个列表一样:

  • 123 Main St
  • 456 Broad St
  • 789 Chestnut St

......这些地址的建筑物不需要实际上彼此相邻。

希望这有助于您了解List<Datapoint>实际上是什么:对象的引用列表,它具有属性但传统上不被视为列表本身(尽管在某种意义上它们是),并且可能被分配并存在于记忆中的非相邻点。

答案 2 :(得分:0)

此列表将包含一组数据点。此集合中的数据点将包含公共属性Latitude,Longitude和Elevation。

答案 3 :(得分:0)

这是您的DataPoints对象的列表。因此,如果您想获取每个属性,您将首先访问列表中的对象。类似的东西:

foreach(DataPoint dp in datapoints)
{
    //do something with dp.Latitude
    //do something with dp.Longitude
    //do something with dp.Elevation
}

答案 4 :(得分:0)

List<Datapoint> datapoints; 

此行初始化List,但实际上不会将项目放在其中。然后,您需要从默认构造函数或自定义构造函数向此列表中添加项。这样的事情。

Datapoint thePointToBeInserted = new Datapoint():   //this will cause it to create a Datapoint where the three properties are "no data".
theListOfDataPoints.Add(thePointToBeInserted);   //we add the object to the list.  
theListofDataPoints.Add(new DataPoint("Example latitude", "etc", "etc"));  //adding with custom constructor.