public Interval this[CommandID commandID]
 {
     get
     {
         return GetInterval(commandID);
     }
     set
     {
         if (!Contains(commandID))
         {
             Add(commandID, value);
         }
         else
         {
             CommandInfoList[GetIndex(commandID)].Interval = value;
         }
     }
 }
 public Interval GetInterval(CommandID commandID)
 {
     return GetIndex(commandID) < 0 ? null : CommandInfoList[GetIndex(commandID)].Interval;
 }
 public bool Contains(CommandID commandID)
 {
     return GetInterval(commandID) == null ? false : true;
 }
 public int GetIndex(CommandID commandID)
 {
     return CommandInfoList.FindIndex
         (x =>
             x.CommandID.CommandIndex == commandID.CommandIndex &&
             x.CommandID.FunctionName == commandID.FunctionName &&
             x.CommandID.FunctionParameterCount == commandID.FunctionParameterCount
         );
 }
 public void Add(CommandID commandID, Interval interval)
 {
     CommandInfoList.Add(new CommandInfo { CommandID = commandID, Interval = interval });
 }