Если эта проверка будет выполняться много раз, использование HashSet<>
будет более эффективным, чем линейный поиск для List<>
.Даже если производительность не имеет значения, HashSet<>
может лучше представлять данные и то, как они используются, поскольку каждый элемент уникален, а порядок не имеет значения.
Здесь я использую HashSet<>
из char
s ...
var dir = "FOLDERNAME";
var restrictedChars = new HashSet<char>(
new[] {
'A', 'B', 'C', 'D', 'E', 'F', 'G',
'S', 'T', 'U', 'V', 'W', 'Z', 'Y', 'Z',
'1', '2', '3', '4', '5', '6', '7', '8', '9'
}
);
if (!restrictedChars.Contains(dir[0]))
{
// Do stuff...
}
Обратите внимание, что я поменял ограниченные символы с строчных на прописные, поскольку char.ToUpper()
/ char.ToUpperInvariant()
являются рекомендуемый способ нормализации регистра для сравнения без учета регистра.Затем вы можете выполнить проверку без учета регистра, как это ...
if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
// Do stuff...
}
В качестве альтернативы, вы можете использовать HashSet<>
из string
с и передать без учета регистра StringComparer
экземпляр ...
var dir = "FOLDERNAME";
var restrictedChars = new HashSet<string>(
new[] {
"a", "b", "c", "d", "e", "f", "g",
"s", "t", "u", "v", "w", "z", "y", "z",
"1", "2", "3", "4", "5", "6", "7", "8", "9"
},
StringComparer.OrdinalIgnoreCase
);
// Get a string from Substring() instead of dir[0].ToString()
if (!restrictedChars.Contains(dir.Substring(0, 1)))
{
// Do stuff...
}
При таком подходе регистр ограниченного символа string
с, введенного в HashSet<>
, не имеет значения.