优化代码 foreach (var item in dataList) { IB_COMPANY_SHIP_DATA_STRUCT shipData = item.CompanyShipData; IB_COMPANY_SHIP_NAVI_INFO_STRUCT ship_navi_info = item.CompanyShipNaviInfo; if (shipData != null && ship_navi_info != null) { uint ship_mmsi = shipData.MMSI; int nav_id = ship_navi_info.NavID; //船不存在时 if (m_ShipInfoList.ContainsKey((int)ship_mmsi) == false) { Debug.Log($"CheckShipInfo {ship_mmsi}船不存在"); flag = true; break; } else { //判断当前字典中的Nav_ID与消息中的Nav_ID不相等 if (m_ShipInfoList[(int)ship_mmsi].Nav_ID != (uint)nav_id) { Debug.Log($"CheckShipInfo {ship_mmsi}船数据不是最新数据"); flag = true; break; } } } }
时间: 2024-02-10 13:06:55 浏览: 109
这段代码可以进行一些优化。首先,可以使用 `var` 关键字代替 `IB_COMPANY_SHIP_DATA_STRUCT` 和 `IB_COMPANY_SHIP_NAVI_INFO_STRUCT`,因为已经在前面声明了它们的类型。其次,可以将 `m_ShipInfoList.ContainsKey((int)ship_mmsi)` 的结果存储到一个变量中,以减少重复计算。最后,使用 `foreach` 循环时,如果发现不符合条件的数据可以直接使用 `return` 跳出循环,而不需要使用 `flag` 标志。
下面是优化后的代码:
```
foreach (var item in dataList)
{
var shipData = item.CompanyShipData;
var ship_navi_info = item.CompanyShipNaviInfo;
if (shipData == null || ship_navi_info == null)
continue;
uint ship_mmsi = shipData.MMSI;
int nav_id = ship_navi_info.NavID;
if (!m_ShipInfoList.TryGetValue((int)ship_mmsi, out var shipInfo))
{
Debug.Log($"CheckShipInfo {ship_mmsi}船不存在");
return true;
}
if (shipInfo.Nav_ID != (uint)nav_id)
{
Debug.Log($"CheckShipInfo {ship_mmsi}船数据不是最新数据");
return true;
}
}
```
阅读全文