优化代码 OrderByShipPositions.ForEach(item => { SHIP_POSITION pos = (SHIP_POSITION)Enum.ToObject(typeof(SHIP_POSITION), (int)item.Position); if (LeaveShipData.ContainsKey((int)pos) == true || (int)pos == 13) { LeaveShipData[(int)pos] = item.Time; return; } else { LeaveShipData.Add((int)pos, item.Time); } if (ShipDic.ContainsKey(pos) == true) { if (ShipDic[pos] > item.Time) { ShipDic[pos] = item.Time; } } else { ShipDic.Add(pos, item.Time); } });
时间: 2024-02-10 08:14:25 浏览: 104
可以考虑对代码进行如下优化:
1. 使用`foreach`循环代替`ForEach`方法,可读性更好。
2. 将`if (LeaveShipData.ContainsKey((int)pos) == true || (int)pos == 13)`条件判断语句提取出来,避免重复判断。
3. 使用`TryGetValue`方法代替`ContainsKey`方法查找字典中是否存在某个键,可以避免重复查找。
4. 将`if (ShipDic.ContainsKey(pos) == true)`条件判断语句提取出来,避免重复判断。
优化后的代码如下所示:
```
foreach (var item in OrderByShipPositions)
{
SHIP_POSITION pos = (SHIP_POSITION)Enum.ToObject(typeof(SHIP_POSITION), (int)item.Position);
if (pos == SHIP_POSITION.SHIP_POSITION_LEAVE || pos == SHIP_POSITION.SHIP_POSITION_BERTH)
{
LeaveShipData[(int)pos] = item.Time;
if (!ShipDic.TryGetValue(pos, out var time) || time > item.Time)
{
ShipDic[pos] = item.Time;
}
}
else
{
if (!LeaveShipData.TryGetValue((int)pos, out var time))
{
LeaveShipData.Add((int)pos, item.Time);
}
if (!ShipDic.TryGetValue(pos, out var t) || t > item.Time)
{
ShipDic[pos] = item.Time;
}
}
}
```
这样可以使代码更加简洁易读,同时避免了重复判断和查找字典键值对。