多くのタイプのデータメンバーを反復処理する方法は?複数のデータメンバーを持つIEnumerable
これは私が
interface ISeries : IReadOnlyList<Tuple<DateTime, double>>
{
IEnumerable<DateTime> Time { get; }
IEnumerable<double> Values { get; }
}
のDateTimeと私のカスタムオブジェクトのクラスとのダブル実装している必要がありますインターフェイスであることTimeEventsで作られた私のカスタムシリーズの
class TimeEvent
{
public DateTime Time;
public double Value;
public TimeEvent(DateTime time, double value)
{
Time = time;
Value = value;
}
}
クラス
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();
}
}
これを基本的に使ってみようとしています。だから、私はTimeSeriesで動かすアイテムを繰り返すことができます。辞書のように。
class Program
{
static void Main()
{
TimeEvent t1 = new TimeEvent(new DateTime(2017, 1, 1), 64);
TimeEvent t2 = new TimeEvent(new DateTime(2017, 2, 3), 128);
TimeEvent t3 = new TimeEvent(new DateTime(2017, 3, 6), 256);
List<TimeEvent> list = new List<TimeEvent>();
list.Add(t1);
list.Add(t2);
list.Add(t3);
TimeSeries series = new TimeSeries(list);
foreach(DateTime date in series.Time)
Console.WriteLine(date);
foreach (double d in series.Values)
Console.WriteLine(d);
}
}
またはちょうど 公開IEnumerable時間=> TimeEvents.Select(x => x.Time);および public IEnumerable 値=> TimeEvents.Select(x => x.Value); –
ckuri
ckuriはいそれはさらに良いです、thnx – Universus