Сравнение объектов.
This commit is contained in:
parent
1a47764b37
commit
6008fd74ab
@ -33,5 +33,48 @@ namespace AirplaneWithRadar
|
|||||||
public string GetInfo() => _airplane?.GetDataForSave();
|
public string GetInfo() => _airplane?.GetDataForSave();
|
||||||
public static IDrawingObject Create(string data) => new DrawingObjectAirplane(data.CreateDrawingAirplane());
|
public static IDrawingObject Create(string data) => new DrawingObjectAirplane(data.CreateDrawingAirplane());
|
||||||
|
|
||||||
|
public bool Equals(IDrawingObject? other)
|
||||||
|
{
|
||||||
|
if (other == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var otherAirplane = other as DrawingObjectAirplane;
|
||||||
|
if (otherAirplane == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var airplane = _airplane.Airplane;
|
||||||
|
var otherAirplaneAirplane = otherAirplane._airplane.Airplane;
|
||||||
|
if (airplane.Speed != otherAirplaneAirplane.Speed)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (airplane.Weight != otherAirplaneAirplane.Weight)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (airplane.BodyColor != otherAirplaneAirplane.BodyColor)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// TODO доделать проверки в случае продвинутого объекта
|
||||||
|
if (airplane is EntityAirplaneWithRadar airpl && otherAirplaneAirplane is EntityAirplaneWithRadar otherAirpl)
|
||||||
|
{
|
||||||
|
if (airpl.DopColor != otherAirpl.DopColor)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (airpl.Radar != otherAirpl.Radar)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (airpl.ExtraFuelTank != otherAirpl.ExtraFuelTank)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal interface IDrawingObject
|
internal interface IDrawingObject : IEquatable<IDrawingObject>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Шаг перемещения объекта
|
/// Шаг перемещения объекта
|
||||||
|
@ -13,7 +13,7 @@ namespace AirplaneWithRadar
|
|||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
/// <typeparam name="U"></typeparam>
|
/// <typeparam name="U"></typeparam>
|
||||||
internal class MapWithSetAirplanesGeneric<T, U>
|
internal class MapWithSetAirplanesGeneric<T, U>
|
||||||
where T : class, IDrawingObject
|
where T : class, IDrawingObject, IEquatable<T>
|
||||||
where U : AbstractMap
|
where U : AbstractMap
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -11,7 +11,7 @@ namespace AirplaneWithRadar
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
internal class SetAirplanesGeneric<T>
|
internal class SetAirplanesGeneric<T>
|
||||||
where T : class
|
where T : class, IEquatable<T>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список объектов, которые храним
|
/// Список объектов, которые храним
|
||||||
@ -59,6 +59,10 @@ namespace AirplaneWithRadar
|
|||||||
{
|
{
|
||||||
// TODO проверка позиции
|
// TODO проверка позиции
|
||||||
// TODO вставка по позиции
|
// TODO вставка по позиции
|
||||||
|
if (_places.Contains(airplane))
|
||||||
|
{
|
||||||
|
throw new ArgumentException($"Данный объект ({airplane}) уже есть в наборе");
|
||||||
|
}
|
||||||
if (position < 0 || position >= _maxCount)
|
if (position < 0 || position >= _maxCount)
|
||||||
{
|
{
|
||||||
throw new StorageOverflowException(_maxCount);
|
throw new StorageOverflowException(_maxCount);
|
||||||
|
Loading…
Reference in New Issue
Block a user