C# 是否可以在分类列表下标<;日期时间,十进制[]>;按名称获取对象的值?

C# 是否可以在分类列表下标<;日期时间,十进制[]>;按名称获取对象的值?,c#,C#,从CSV文件加载数据时,我为每行数据创建一个DataPoint对象: public class DataPoint { public DateTime Date {get; set;} public Decimal Open {get; set;} public Decimal High {get; set;} public Decimal Low {get; set;} public Decimal Close {get; set;} } 然后我将每个

从CSV文件加载数据时,我为每行数据创建一个
DataPoint
对象:

public class DataPoint
{
    public DateTime Date {get; set;}
    public Decimal Open {get; set;}
    public Decimal High {get; set;}
    public Decimal Low {get; set;}
    public Decimal Close {get; set;}
}
然后我将每个
DataPoint
添加到
TimeSeries
对象中,该对象只不过是一个
SortedList

但我希望能够这样做:

var timeSeries = Load(filename); // Load the data

foreach(var dp in timeSeries)
{
  WriteLine($"{dp.Key}, {dp.Values[4]}");
}
var timeSeries = Load(filename); // Load the data

foreach(var dp in timeSeries)
{
  WriteLine($"{dp.Date}, {dp.Close}");
}
有没有办法为
TimeSeries
对象下标来实现这一点


是否最好使用
TimeSeries
而不是
TimeSeries
我过去不复制用作键的字段?

最好封装集合字段,然后使用继承:

public class TimeSeries
{
    private readonly SortedList<DateTime, DataPoint> internalCollection = new SortedList<DateTime, DataPoint>();

    public void Add(DataPoint dataPoint)
    {
        internalCollection.Add(dataPoint.Date, dataPoint);
    }

    public IEnumerator<DataPoint> GetEnumerator()
    {    
        foreach(var point in internalCollection)
        {
            yield return point.Value;
        }
    }
}

最后一个问题的答案:是的。
public class TimeSeries
{
    private readonly SortedList<DateTime, DataPoint> internalCollection = new SortedList<DateTime, DataPoint>();

    public void Add(DataPoint dataPoint)
    {
        internalCollection.Add(dataPoint.Date, dataPoint);
    }

    public IEnumerator<DataPoint> GetEnumerator()
    {    
        foreach(var point in internalCollection)
        {
            yield return point.Value;
        }
    }
}
TimeSeries timeSeries = DataLoader.LoadData();

foreach(var dataPoint in timeSeries)
{
    WriteLine($"{dataPoint.Date}, {dataPoint.Close}");
}