Да, это будет «работать» - пока в словаре не будет ключ для каждого значения в диапазоне. В этом случае вы получите StackOverflowException
.
Вы все равно можете получить StackOverflowException
, даже если технически возможно приземлиться на уникальный номер - это зависит от того, насколько велик ваш диапазон, сколько осталось уникальных чисел и насколько вам не повезло.
Также рассмотрим ситуацию, когда ваш словарь содержит все ключи от 0 до 1000, кроме одного. Это может занять тысячи рекурсий, прежде чем ваше случайное число попадет на это окончательное число.
Так что да, хотя это может сработать, это не лучший способ генерировать уникальные идентификаторы.
Альтернативное решение может состоять в создании класса генератора идентификаторов, который раздает числа последовательно, поддерживая член «nextId» и увеличивая его каждый раз, когда раздает идентификатор, немного похоже на то, как базы данных дают идентификаторы для записей со столбцом идентификаторов. .
Другое решение состоит в том, чтобы использовать GUID для своих идентификаторов вместо целых.