Как проверить наличие свойства объекта внутри оператора условия «если» - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть список объектов типа ROUTE.

Каждый объект ROUTE содержит строковые свойства, но некоторые объекты не содержат свойства EXITSIGNAL (не существует, не ноль)

часть кода:

List<ROUTE> SelectedRoutes = new List<ROUTE>();
foreach (var route in XmlData.ROUTES)
{
   if (sig.SignalID.Equals(route.ENTRANCESIGNAL) &&
       sig.SignalDIRECTION.Equals(route.DIRECTION) &&                     
       "Condition on EXITSIGNAL property")
   {
       SelectedRoutes.Add(route);
   }
}

Как добавить третье условие, которое позволяет мне выбирать только объекты, которые содержат это свойство "EXITSIGNAL"

1 Ответ

0 голосов
/ 25 апреля 2019

В идеале вы должны проверить, принадлежит ли объект классу, который содержит свойство. т.е. if (route is ROUTECLASS_WITH_EXITSIGNAL) ... И если у вас есть несколько классов, свойства которых делают их производными от общего класса, содержащего EXITSIGNAL и производного от ROUTE, то проверьте, если is EXITSIG_CLASSTYPE.

На основе предоставленного вами кода вы можете получить информацию о типе для объекта ROUTE и посмотреть, поддерживает ли он свойство EXITSIGNAL, при условии, что все свойства EXITSIGNAL имеют одинаковый тип.

List<ROUTE> SelectedRoutes = new List<ROUTE>();
foreach (var route in XmlData.ROUTES)
{
   bool bHasExitSig = false;
   if (route.GetType().GetProperty("EXITSIGNAL", typeof(string)) != null)
   {
       bHasExitSig = true;
   }

   if (sig.SignalID.Equals(route.ENTRANCESIGNAL) &&
       sig.SignalDIRECTION.Equals(route.DIRECTION) &&                     
       bHasExitSig)
   {
       SelectedRoutes.Add(route);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...