Недостатком является то, что все имена должны быть объединены в одну большую строку. Проблема в том, что Contains может вернуть true, если вы этого не хотите. Что, если usernames
уже содержит «Роберт» и новое проверяемое имя - «Роб»? Теперь Роб не может ввести свое имя, потому что оно конфликтует с Робертом.
Другой пример: если вы выполните проверку без учета регистра, то "Liz" или "Beth" вернет true, если usernames
уже содержит "Elizabeth".
Лучшим дизайном будет иметь коллекцию индивидуальных имен. Хотя это может быть List<string>
, я думаю, что Hashset<string>
лучше подходит для ваших нужд. Если вы хотите, чтобы при поиске учитывался регистр символов, т. Е. «Bob» и «Bob» - это два разных имени, тогда вы ничего особенного не делаете:
Hashset<string> usernames = new Hashset<string>();
Но если вы хотите, чтобы имена были нечувствительными к регистру, тогда вы можете объявить свой набор ha sh соответствующим образом:
Hashset<string> usernames = new Hashset<string>(StringComparer.OrdinalIgnoreCase);
Hashset также имеет метод Contains
, но он оптимизирован для быстрого поиска. Для получения дополнительной информации о Hashset см. эту ссылку .
ОБНОВЛЕНО ИСПОЛЬЗОВАНИЕМ
ОП сказал, что он не может использовать Hashset. Это камень преткновения для начинающих учеников. Мы все споткнулись, когда только начали. Чтобы использовать определенные объекты, вам необходимо либо полностью их квалифицировать, что делает ваш код уродливым, либо добавить соответствующий using
перед вашим пространством имен.
Вы можете использовать System.Collections.Generic.Hashset<string>
, но это кажется немного многословным и некрасиво. Вместо этого добавьте эти операторы перед своим пространством имен:
using System;
using System.Collections.Generic;
И Hashset и StringComparer должны нормально работать.
Подробнее о StringComparer см. эту ссылку .