Принятая 8 лаба

This commit is contained in:
Ctepa 2024-05-20 14:27:40 +03:00
parent a3ebc9f2c6
commit 85c0cbdaba
6 changed files with 42 additions and 28 deletions

View File

@ -23,14 +23,14 @@ public interface ICollectionGenericObjects<T>
/// </summary>
/// <param name="obj">Добавляемый объект</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
bool Insert(T obj,IEqualityComparer<DrawningGun?>? comparer=null);
bool Insert(T obj,IEqualityComparer<T?>? comparer=null);
/// <summary>
/// Добавление объекта в коллекцию на конкретную позицию
/// </summary>
/// <param name="obj">Добавляемый объект</param>
/// <param name="position">Позиция</param>
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
bool Insert(T obj, int position, IEqualityComparer<DrawningGun?>? comparer=null);
bool Insert(T obj, int position, IEqualityComparer<T?>? comparer=null);
/// <summary>
/// Удаление объекта из коллекции с конкретной позиции
/// </summary>

View File

@ -1,6 +1,5 @@
using AntiAircraftGun.Drawnings;
using AntiAircraftGun.Exceptions;
using System.Linq;
namespace AntiAircraftGun.CollectionGenericObjects;
/// <summary>
@ -38,7 +37,7 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
}
return _collection[position];
}
public bool Insert(T obj, IEqualityComparer<DrawningGun?> comparer = null)
public bool Insert(T obj, IEqualityComparer<T?> comparer = null)
{
// TODO проверка, что не превышено максимальное количество элементов
// TODO вставка в конец набора
@ -47,9 +46,14 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
if (comparer != null)
{
if (_collection.Contains(obj,comparer))
foreach (T? item in _collection)
{
throw new ObjectIsEqualException();
if (item == null) continue;
if ((comparer as IEqualityComparer<DrawningGun>).Equals(obj as DrawningGun, item as DrawningGun))
{
throw new ObjectIsEqualException();
}
}
}
@ -57,7 +61,7 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
_collection.Add(obj);
return true;
}
public bool Insert(T obj, int position, IEqualityComparer<DrawningGun?> comparer = null)
public bool Insert(T obj, int position, IEqualityComparer<T?> comparer = null)
{
// TODO проверка, что не превышено максимальное количество элементов
// TODO проверка позиции
@ -68,9 +72,14 @@ public class ListGenericObjects<T> : ICollectionGenericObjects<T>
if (comparer != null)
{
if (_collection.Contains(obj, comparer))
foreach (T? item in _collection)
{
throw new ObjectIsEqualException();
if (item == null) continue;
if ((comparer as IEqualityComparer<DrawningGun>).Equals(obj as DrawningGun, item as DrawningGun))
{
throw new ObjectIsEqualException();
}
}
}
if (Count>=_maxCount) throw new CollectionOverflowExecption(_maxCount);

View File

@ -60,7 +60,7 @@ internal class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
}
return _collection[position];
}
public bool Insert(T obj, IEqualityComparer<DrawningGun?> comparer = null)
public bool Insert(T obj, IEqualityComparer<T?> comparer = null)
{
// TODO вставка в свободное место набора
// TODO выброс ошибки, если переполнение
@ -80,7 +80,7 @@ internal class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
throw new CollectionOverflowExecption(Count);
}
public bool Insert(T obj, int position, IEqualityComparer<DrawningGun?> comparer = null)
public bool Insert(T obj, int position, IEqualityComparer<T?> comparer = null)
{
// TODO проверка позиции
// TODO проверка, что элемент массива по этой позиции пустой, если нет, то

View File

@ -159,12 +159,12 @@ where T : DrawningGun
{
if (!collection.Insert(gun))
{
throw new Exception("Объект не удалось добавить в коллекию: " + record[3]);
throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]);
}
}
catch (CollectionOverflowExecption ex)
{
throw new Exception("Коллекция переполнена",ex);
throw new Exception("Коллекция переполнена", ex);
}
}
}

View File

@ -35,23 +35,23 @@ public class DrawningGunEqutables : IEqualityComparer<DrawningGun?>
{
return false;
}
if (x is DrawningAntiAircraftGun && y is DrawningAntiAircraftGun)
if (x is DrawningAntiAircraftGun xa && y is DrawningAntiAircraftGun ya )
{
// TODO доделать логику сравнения дополнительных параметров
EntityAntiAircraftGun left = (EntityAntiAircraftGun)x.EntityGun;
EntityAntiAircraftGun right=(EntityAntiAircraftGun)y.EntityGun;
if(left.OptionalElementsColor != right.OptionalElementsColor)
if(xa.EntityGun is EntityAntiAircraftGun left && ya.EntityGun is EntityAntiAircraftGun right)
{
return false;
}
if(left.Radar != right.Radar)
{
return false;
}
if(left.Hatch != right.Hatch)
{
return false;
if (left.OptionalElementsColor != right.OptionalElementsColor)
{
return false;
}
if (left.Radar != right.Radar)
{
return false;
}
if (left.Hatch != right.Hatch)
{
return false;
}
}
}
return true;

View File

@ -54,7 +54,7 @@ public partial class FormGunCollections : Form
/// Добавление автомобиля в коллекцию
/// </summary>
/// <param name="gun"></param>
private void SetGun(DrawningGun gun)
private void SetGun(DrawningGun? gun)
{
try
{
@ -72,6 +72,11 @@ public partial class FormGunCollections : Form
MessageBox.Show("Не удалось добавить объект");
_logger.LogError("Ошибка: {Message}", ex.Message);
}
catch (ObjectIsEqualException ex)
{
MessageBox.Show("Не удалось добавить объект");
_logger.LogError("Ошибка: {Message}", ex.Message);
}
}
/// <summary>