сравнение объектов

This commit is contained in:
evasina2312@gmail.com 2022-12-21 10:10:47 +04:00
parent e0e57dbd59
commit cd4cf22b7e
4 changed files with 60 additions and 4 deletions

View File

@ -40,5 +40,59 @@ namespace ProjectMachine
public string GetInfo() => _machine?.GetDataForSave();
public static IDrawningObject Create(string data) => new DrawningObject(data.CreateDrawningMachine());
public bool Equals(IDrawningObject? other)
{
if (other == null)
{
return false;
}
var otherMachine = other as DrawningObject;
if (otherMachine == null)
{
return false;
}
var machine = _machine.Machine;
var otherMachineMachine = otherMachine._machine.Machine;
if (machine.Speed != otherMachineMachine.Speed)
{
return false;
}
if (machine.Weight != otherMachineMachine.Weight)
{
return false;
}
if (machine.BodyColor != otherMachineMachine.BodyColor)
{
return false;
}
//проверка на то, что являются ли оба объекта продвинутыми
if (machine is EntityTank && otherMachineMachine is not EntityTank)
{
return false;
}
if (machine is not EntityTank && otherMachineMachine is EntityTank)
{
return false;
}
//если оба объекта являются продвинутыми, сравниваем дополнительные характеристики
if (machine is EntityTank tank && otherMachineMachine is EntityTank otherTank)
{
if (tank.DopColor != otherTank.DopColor)
{
return false;
}
if (tank.Gun != otherTank.Gun)
{
return false;
}
if (tank.Turret != otherTank.Turret)
{
return false;
}
}
return true;
}
}
}

View File

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

View File

@ -12,7 +12,7 @@ namespace ProjectMachine
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
internal class MapWithSetTankGeneric<T, U>
where T : class, IDrawningObject
where T : class, IDrawningObject, IEquatable<T>
where U : AbstractMap
{
/// <summary>

View File

@ -11,7 +11,7 @@ namespace ProjectMachine
/// </summary>
/// <typeparam name="T"></typeparam>
internal class SetTankGeneric<T>
where T : class
where T : class, IEquatable<T>
{
/// <summary>
/// Список объектов, которые храним
@ -50,6 +50,8 @@ namespace ProjectMachine
/// <returns></returns>
public int Insert(T tank, int position)
{
if (_places.Contains(tank))
throw new ArgumentException($"Объект {tank} уже есть");
if (Count >= _maxCount)
throw new StorageOverflowException(Count);
if (position < 0 || position >= _maxCount)