В идеале вы должны проверить, принадлежит ли объект классу, который содержит свойство. т.е. 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);
}
}