IEnumerable具有多个数据成员

时间:2017-06-18 22:13:04

标签: c# ienumerable

如何实现多种类型的数据成员的迭代?

这是我必须实施的界面

=========================================================================
HDL Synthesis Report

Macro Statistics
# Multipliers                                          : 1
 9x9-bit multiplier                                    : 1
# Registers                                            : 3
 18-bit register                                       : 1
 9-bit register                                        : 2

=========================================================================

我的自定义对象的类,其中包含DateTime并且在其中加倍

interface ISeries : IReadOnlyList<Tuple<DateTime, double>>
{
    IEnumerable<DateTime> Time { get; }
    IEnumerable<double> Values { get; }
}

由TimeEvents制作的自定义系列的类

class TimeEvent
{
    public DateTime Time;
    public double Value;
    public TimeEvent(DateTime time, double value)
    {
        Time = time;
        Value = value;
    }
}

这里基本上是我试图用它。所以我可以迭代TimeSeries中的trought项目。很像字典。

class TimeSeries : ISeries
{
    List<TimeEvent> TimeEvents;

    public TimeSeries(List<TimeEvent> timeEvents)
    {
        TimeEvents = timeEvents;
    }

    public Tuple<DateTime, double> this[int index]
    {
        get
        {
            return new Tuple<DateTime, double>(TimeEvents[index].Time, TimeEvents[index].Value);
        }
    }

    public int Count
    {
        get
        {
            return TimeEvents.Count;
        }
    }

    public IEnumerable<DateTime> Time
    {
        get
        {
            throw new NotImplementedException();
        }
    }

    public IEnumerable<double> Values
    {
        get
        {
            throw new NotImplementedException();
        }
    }

    public IEnumerator<Tuple<DateTime, double>> GetEnumerator()
    {
        return GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return TimeEvents.GetEnumerator();
    }
}

2 个答案:

答案 0 :(得分:2)

...
List<TimeEvent> TimeEvents;

public TimeSeries(List<TimeEvent> timeEvents)
{
    TimeEvents = timeEvents;
}

public IEnumerable<DateTime> Time
{
    get
    {
        foreach (var item in TimeEvents)
        {
            yield return item.Time;
        }
    }
}

public IEnumerable<double> Values
{
    get
    {
        foreach (var item in TimeEvents)
        {
            yield return item.Value;
        }
    }
}

答案 1 :(得分:1)

对你有用的东西会更简单吗?

List<Tuple<DateTime, double>> list = new List<Tuple<DateTime, double>>();
list.Add(Tuple.Create(new DateTime(2017, 1, 1), 64d));
list.Add(Tuple.Create(new DateTime(2017, 2, 3), 128d));
list.Add(Tuple.Create(new DateTime(2017, 3, 6), 256d));

foreach (Tuple<DateTime, double> tuple in list)
{
    Console.WriteLine("DateTime={0:yyyy/dd/mm}, Double={1}", tuple.Item1, tuple.Item2);
}

似乎working