Сравнение объектов.

This commit is contained in:
Anastasia 2022-12-12 14:59:18 +04:00
parent 1a47764b37
commit 6008fd74ab
4 changed files with 50 additions and 3 deletions

View File

@ -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;
}
} }
} }

View File

@ -3,7 +3,7 @@
/// <summary> /// <summary>
/// Интерфейс для работы с объектом, прорисовываемым на форме /// Интерфейс для работы с объектом, прорисовываемым на форме
/// </summary> /// </summary>
internal interface IDrawingObject internal interface IDrawingObject : IEquatable<IDrawingObject>
{ {
/// <summary> /// <summary>
/// Шаг перемещения объекта /// Шаг перемещения объекта

View File

@ -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>

View File

@ -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);