我想访问类列表中的某个字段,以便我可以在循环中进行计算。
这是我的课程首先:
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
}
答案 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); });