PIbd-11_Chechevitcyn_S.A_AntiAircraftGun_Simple_LabWork8(Last) #10
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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 проверка, что элемент массива по этой позиции пустой, если нет, то
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user
У списка есть метод Contains для проверки