Я хотел бы хранить данные в Универсальном словаре с ключами, которые совпадают с диапазонами дат.
Например, я пришел к следующей идее
public class MyKey : IEquatable<MyKey>
{
public int Key { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public override int GetHashCode()
{
returns Key;
}
// if there is overlap in date range consider them equal
public bool Equals(MyKey other)
{
if (Key!=other.Key)
return false;
else if(other.StartDate >=StartDate && other.StartDate <=EndDate)
return true;
else if(other.EndDate >=StartDate && other.EndDate <=EndDate)
return true;
else if(StartDate >=other.StartDate && StartDate <=other.EndDate)
return true;
else if(EndDate >=other.StartDate && EndDate <=other.EndDate)
return true;
else
return false;
}
}
Тогда я бы использовалСловарь как таковой
var dict = new Dictionary<MyKey,MyClass>();
Populate(dict);
// get an element where the current date is in the daterange of the key
// in the collection
var key = new MyKey();
key.Key=7;
key.StartDate=DateTime.Now;
key.EndDate=key.StartDate;
// retrieve the matching element for the date
var myclass = dict[key];
Это было лучшее, что я мог придумать, однако это кажется глупым способом сделать это.Я думал о добавлении четвертого свойства под названием дата выбора.И установил бы это в null в записях словаря, но использовал бы это во время поисков в методе Equals.
Мне интересно, если кто-нибудь еще придумал элегантное решение этой проблемы?
Следует отметить, что сначала я сопоставлю ключ, а затем могут быть диапазоны дат для конкретного свойства ключа.