Как проверить существуют ли объекты с похожими данными? Элементарный 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."
→ Ссылка