c#如何访问列表元素<class> </class>

时间:2014-03-31 09:53:08

标签: c# list

我想访问类列表中的某个字段,以便我可以在循环中进行计算。

这是我的课程首先:

public class Hold
{
    public DateTime Time { get; set; }
    public Double XPosition { get; set; }
    public Double YPosition { get; set; }
}

然后是我的列表List<Hold>Data;

然后我使用Linq来存储查询中的值。

我理想的做法是访问List的Time部分,如下所示:

for(int i =0; i < Data.Count; i++)
{
    double average = Data.Time  // etc etc
}

6 个答案:

答案 0 :(得分:2)

寻找一个简单的foreach?

foreach(Hold h in Data)
{
     DateTime t = h.Time;

     ... other properties or whatever method defined for the class Hold
}

List<T>实现IEnumerator接口,因此当您需要遍历List的所有元素并提取其对象时,使用foreach是很自然的

foreach方法唯一可能的问题是,如果您需要在迭代它们时从列表中删除元素。但是如果你不需要这个,那么foreach是访问列表中包含的元素的最简单和最自然的方式。

然而,知道你想在循环中做什么会很有趣 也许有更简单的方法使用Linq并完全删除循环。

例如,如果要计算列表中存储的时间值的平均秒数,可以使用

删除循环。
 var k = data.Select(x => new TimeSpan(x.Time.Hour, x.Time.Minute, x.Time.Second))
             .Average(z => z.TotalSeconds);

答案 1 :(得分:1)

您需要将索引器Data[i]与列表对象一起使用。您的数据类型为DateTime,不应直接指定为double。

for(int i =0; i < Data.Count; i++)
{    
   //double average = Data[i].Time; 
   //Your code goes here.
}

您可以使用foreach循环

for(var data in Data)
{
    //data.Time         //You can use data.Time here
}

答案 2 :(得分:1)

该列表没有&#34;时间部分&#34;。列表持有的对象具有Time成员。

你可以这样做:

for(int i =0; i < Data.Count; i++)   
{
    double average = Data[i].Time etc etc
}

让Saverio Terracciano开心:

for (int i = 0; i < Data.Count; i++)   
{
    // Access members of Hold, write something like
    ... = Data[i].<Member Name>
}

如果你不评估i在任何其他地方,而不仅仅是为了索引列表,你也可以写

foreach (Hold h in Data)
{
    ... = h.<Member Name>;
}

答案 3 :(得分:1)

要创建列表成员的平均值,您需要执行两个步骤:

您需要类实例列表转换为要进行计算的值列表。您可以使用Select扩展方法执行此操作。

您需要计算平均值。您可以使用Average扩展方法执行此操作。

var data = new List<Hold>();

// fill list 

var transformed = data.Select(hold => hold.Time);

var average = transformed.Average();

您可以通过使用包含转换的平均扩展方法的重载来执行此操作:

var average = data.Average(hold => hold.Time);

答案 4 :(得分:0)

如果我理解正确(来自您的变量名称),您想要计算日期时间值的平均值。你应该这样做:

double totalTicks=0D;
foreach(var x in Data){
   totalTicks+=x.Time.Ticks;
}
double averageTicks=totalTicks / Data.Count();
DateTime avgDateTime=new DateTime(averageTicks);

答案 5 :(得分:0)

//get all values of Time Property from Data collection
List<DateTime> dateList = new List<DateTime>();
Data.ForEach((h)=> { dateList.Add(h.Time); });