如何在“ if”条件语句中检查对象属性的存在

时间:2019-04-25 17:19:30

标签: c# if-statement

我有一个ROUTE类型的对象的列表。

每个ROUTE对象都包含字符串属性,但是某些对象不包含EXITSIGNAL属性(不存在,不为null)

一些代码:

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 :(得分:0)

理想情况下,您将测试对象是否属于包含该属性的类。即if (route is ROUTECLASS_WITH_EXITSIGNAL) ... 并且,如果您有几个具有该属性的类,则使它们从包含EXITSIGNAL且从ROUTE派生的公共类派生,然后测试是否is EXITSIG_CLASSTYPE

根据您提供的代码,您可以获取ROUTE对象的Type信息,并假设所有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);
   }
}