internal DataKey GetKey(DateTime dateTime, DataKey key = null, IndexOption option = IndexOption.Null)
{
lock (Sync)
{
if (Count == 0 || dateTime > DateTime2)
{
Console.WriteLine($"DataSeries::GetKey dateTime is out of range : {dateTime}");
return null;
}
if (key == null)
key = this.readKey;
DataKey @class = null;
DataKey class2 = null;
if (dateTime <= DateTime1)
return GetFirstKey();
if (key != null)
{
if (key.dateTime1 <= dateTime && dateTime <= key.dateTime2)
return key;
if (dateTime > key.dateTime2)
{
class2 = key;
@class = GetNextKey(class2);
}
}
if (@class == null)
@class = GetFirstKey();
while (option == IndexOption.Null || class2 == null || !(dateTime > class2.dateTime2) || !(dateTime < @class.dateTime1))
{
if (@class.dateTime1 <= dateTime && dateTime <= @class.dateTime2)
{
return @class;
}
class2 = @class;
@class = GetNextKey(class2);
}
if (option == IndexOption.Next)
{
return @class;
}
return class2;
}
}