Как поддерживать список объектов, чтобы запомнить изменение состояния этих объектов?

#c# #object

#c# #объект

Вопрос:

мне нужно что-то запомнить (точно это изменение состояния маршрута), мой подход таков: сначала создайте список (назовите его LOR) базы объектов на основе состояния чего-либо, после этого каждые 10 минут повторно запрашивайте состояние этих маршрутов и сбрасывайте свойство LOR , при изменении любого маршрута в свойстве LOR этот маршрут вызовет событие .

вот код :

сначала я создаю список маршрутов объектов

 List<Route> listOfRouteObj = new List<Route>();
  

определение моего объекта :

 class Route
{

    public class EventArgsPriority : EventArgs
    {
        public int oldPriority { get; set; }
        public int newPriority { get; set; }
    }
    public delegate void PriorityChangedEventHandler(EventArgsPriority e);

    public event PriorityChangedEventHandler onPriorityChanged;


    #region properties

    private int miPriority = 3000;
    public int Priority
    {
        get
        {
            return miPriority;
        }
        internal set
        {
            if (miPriority != value)
            {
                PriorityChangedEventHandler handler = onPriorityChanged;
                EventArgsPriority aps = new EventArgsPriority();
                aps.oldPriority = miPriority;
                aps.newPriority = value;
                handler(aps);
            }
            miPriority = value;
        }
    }

    //

    private string mstrRouteID = "";
    public string RouteID
    {
        get
        {
            return mstrRouteID;
        }
        internal set
        {
            mstrRouteID = value;
        }
    }


    //
    public Route(int iPriority, string strRoutrID)
    {
        miPriority = iPriority;

        mstrRouteID = strRoutrID;

    }

}   
  

и при первом запросе я получаю состояние некоторого маршрута, и в цикле я создаю все объекты маршрута и добавляю их в список :

   Route r1 = new Route(int.Parse(row["priority"].ToString()),row["routeID"].ToString());

  r1.onPriorityChanged  = new Route.PriorityChangedEventHandler(onRoutePriorityChanged);

  listOfRouteObj .add(r1);
  

где функция onRoutePriorityChanged :

 private void onRoutePriorityChanged(Route.EventArgsPriority e)
{
    MessageBox.Show(e.oldPriority.ToString());
    MessageBox.Show(e.newPriority.ToString());
}
  

до сих пор все было в порядке ,

но чего я не знаю, так это: когда через 10 минут придет время для следующего запроса, среди этих маршрутов некоторые отключены, некоторые добавлены новые, у некоторых изменен приоритет, как я могу обновить свой listOfRouteObj до новейшего состояния? например, для маршрута, идентификатор которого = 1, обновите его приоритет с 1000 до 2000 в зависимости от новой ситуации.

Ответ №1:

Вы можете использовать LINQ:

 var route = listOfRouteObj.SingleOrDefault(route => route.RouteID.Equals("1"));
if(route != null)
   route.Priority = 1000;
  

Это то, что вы имеете в виду??

Комментарии:

1. может быть, да, позвольте мне протестировать это

2. @yangl Хорошо, дайте мне знать, прошел ли он ваш тест;-)