Как проверить существуют ли объекты с похожими данными? Элементарный C#
class Account
{
public double Sum { get; set; }
public int ID { get; set; }
public Account(int id, double sum)
{
//if (valuesAreFuckedUp)
//{
// exeption bla bla lba
//}
ID = id;
Sum = sum;
}
}
Суть в том, чтобы всякий созданный объект типа Account имел уникальный ID. Предполагаю что это необходимо делать в конструкторе.
Думаю, ключ к решению это Dictionary, где TKey будет ID объекта, а в качестве второго значения TValue сам объект. Проблема лишь в том, что я не знаю как занести объект в Dictionary сразу после создания.
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Как предложил @DanBear в комментариях, можно использовать статическое поле для задания уникального идентификатора. Само свойство Id при этом сделать только для чтения.
class Account
{
private static int _idCounter = 0;
public double Sum { get; set; }
public int Id { get; private set; }
public Account(double sum)
{
Id = _idCounter++;
Sum = sum;
}
}
А в словарь это можно внести вот так
Dictionary<int, Account> accounts = new Dictionary<int, Account>();
Account account = new Account(1234);
accounts.Add(account.Id, account);
Автор решения: PuffyInsolent
→ Ссылка
Я конечно запоздал, но разобрался-таки с вопросом. Видимо мой вопрос, оказался не совсем точным и были некоторые недопонимания от пользователей, но вот мой ответ на свой же вопрос. Итак, задача состояла в том, чтобы при создании объектов им нельзя было присвоить один и тот же ID(например) или другой параметр. Как я и предполагал для этого можно использовать Dictionary.
class Type
{
// Словарь, где ключ это ID объекта, а значение сам объект
public static Dictionary<int, Type> idController = new Dictionary<int, Type>();
public int ID { get; set; }
public Type(int id)
{
ID = id;
try
{
idController.Add(ID, this); //Добавляем в список созданный объект с его ID
}
catch (ArgumentException)
{
Console.WriteLine("Обнаружены объекты с совпадающим ID.");
}
}
}
Если написать что-то вроде
var type1 = new Type(1);
var type2 = new Type(1);
вызовется блок catch и выведет "Обнаружены объекты с совпадающими ID."