Убедитесь, что ваше определение заглавных букв совпадает. Определение заглавных букв.
ToUpper () в .Net является лингвистической операцией. В некоторых языках правила использования заглавных букв не так просты. Турецкий Я известен этим .
// Meaning of ToUpper is linguistic and depends on what locale this executes
// This test could pass or fail in ways that surprise you.
if (input.ToUpper() == input)
{
// string is all upper
}
Вы можете использовать
// Meaning of ToUpper is basically 'ASCII' ToUpper no matter the locale.
if (input.ToUpper(CultureInfo.InvariantCulture) == input)
{
// string is all upper
}
У вас может возникнуть соблазн сэкономить память, выполняя ввод заглавных букв
MSDN предостерегает от этого
for(int i = 0; i < input.Length; i++) {
if(input[i] != Char.ToUpper(input[i], CultureInfo.InvariantCulture)) {
return false;
}
}
Приведенный выше код вводит ошибку. Некоторые неанглийские «буквы» требуют двух символов .net для кодирования (суррогатная пара). Вы должны обнаружить эти пары и использовать их как одну единицу.
Кроме того, если вы опускаете информацию о культуре для получения лингвистической заглавной буквы, вы вносите ошибку, из-за которой в некоторых регионах ваш алгоритм заглавной буквы домашнего варки не согласуется с алгоритмом .net для этой локали.
Конечно, ничего из этого не имеет значения, если ваш код никогда не будет работать за пределами англоязычных локалей или никогда не получит неанглийский текст.