powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как будет
19 сообщений из 19, страница 1 из 1
Как будет
    #39886422
Vova_1805
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C#, sTUDUIO'2019

char c;
c = (char)Console.Read();
как заменить более пофессионально нижнюю проверку

if (c != 'q' && c != 'Q')
Спасибо
...
Рейтинг: 0 / 0
Как будет
    #39886457
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vova_1805,

tolower(), например...
...
Рейтинг: 0 / 0
Как будет
    #39886461
Vova_1805
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё , Сасибо
до Вашей подсказки я проверил
if (Char.ToUpper(c) !='Q') - работает.
Мне кажется, что в C++
после введенной точки

c.
появлялись функции, а в C# - НЕ ТАК.
...
Рейтинг: 0 / 0
Как будет
    #39886480
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vova_1805
как заменить более пофессионально нижнюю проверку

if (c != 'q' && c != 'Q')
Спасибо

Это самая быстрая проверка, можешь заменить на покрасивее, но будет тормознее.

PS Форум по C# тут

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Как будет
    #39886946
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Согласно рекомендациям Микрософт сравнения с использованием ToUpper() происходят быстрее.
Внутри сравниваются строки в верхнем регистре и если перед этим строки были приведены в нижний регистр, то внутри сравнения их опять преобразуют в верхний.
...
Рейтинг: 0 / 0
Как будет
    #39886957
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

внутри чего?
...
Рейтинг: 0 / 0
Как будет
    #39886962
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

такая рекомендация действительно есть
https://docs.microsoft.com/en-us/dotnet/standard/base-types/best-practices-strings Use the String.ToUpperInvariant method instead of the String.ToLowerInvariant method when you normalize strings for comparison.
но в чем суть, я так и не понял... ниже есть такое
там жеTherefore, the following comparison:
String.Compare(strA, strB, StringComparison.OrdinalIgnoreCase);
is equivalent to (but faster than) this comparison:
String.Compare(strA.ToUpperInvariant(), strB.ToUpperInvariant(), StringComparison.Ordinal);
These comparisons are still very fast.
и такое
там жеThe String.ToUpperInvariant and String.ToLowerInvariant methods are also available. ToUpperInvariant is the standard way to normalize case. Comparisons made using StringComparison.OrdinalIgnoreCase are behaviorally the composition of two calls: calling ToUpperInvariant on both string arguments, and doing a comparison using StringComparison.Ordinal.
но рекомендацию использовать ToUpper вместо ToLower ничего из этого вроде как не объясняет...

P.S. в исходниках сравнение строк упирается в native API call - InternalCompareString - может там собака зарыта?
...
Рейтинг: 0 / 0
Как будет
    #39886967
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача не имеет смысла, потому что теоретически может быть какая-то локаль в которой c != 'q' && c != 'Q' может означать что угодно. Например, в турецкой локали есть известная шляпа:
Код: c#
1.
2.
3.
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("tr-TR");
Console.WriteLine("i".ToUpper() == "I"); // false
Console.WriteLine("I".ToLower() == "i"); // false
...
Рейтинг: 0 / 0
Как будет
    #39886976
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

мокрософты рекомендуют - ToUpperInvariant/ToLowerInvariant
...
Рейтинг: 0 / 0
Как будет
    #39886978
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
string.Equals('q'.ToString(), 'Q'.ToString(), StringComparison.CurrentCultureIgnoreCase)
...
Рейтинг: 0 / 0
Как будет
    #39886980
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

с турецкой локалью, согласно fkthat, имеем
Код: c#
1.
2.
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("tr-TR");
            System.Diagnostics.Debug.WriteLine(string.Equals('i'.ToString(), 'I'.ToString(), StringComparison.CurrentCultureIgnoreCase)); // false
...
Рейтинг: 0 / 0
Как будет
    #39886981
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь поставить инвариантную культуру, всё в твоих руках.
Не понимаю, зачем нужно преобразовывать сравниваемые строки, когда есть штатные инструменты для их сравнения нужным способом (а также штатные компараторы (для Linq, к примеру))

А что касается турецкого примера - так ты турецкую раскладку на клаве сначала поставь и сравнивай ввод из консоли.
У автора-то именно консоль
...
Рейтинг: 0 / 0
Как будет
    #39886993
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

FxCop, кстати, сразу же предупреждает о подобных преобразованиях.

...
Рейтинг: 0 / 0
Как будет
    #39887013
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решарпер тоже подчеркивает
...
Рейтинг: 0 / 0
Как будет
    #39887015
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как будет
    #39887018
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
што это тут происходит?
...
Рейтинг: 0 / 0
Как будет
    #39887023
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Турцию собираемся
...
Рейтинг: 0 / 0
Как будет
    #39887025
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Не бывает универсального "correctly", я о том и говорю, все зависит от конкретной ситуации. В одной ToUpper будет одним, в другой ToUpper будет другим, ToUpperInvariant всегда будет одним и тем же, но, возможно, по конкретной задаче нужно приведение по какой-то конкретной локали, а не по инвариантной. FxCop и Resharper прямо так и говорят - "хочешь делать что-то локалезависимое - указывай явно локаль".
...
Рейтинг: 0 / 0
Как будет
    #39887112
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
Понятно, спасибо.

Cat2,
Согласно рекомендациям Микрософт сравнения с использованием ToUpper() происходят быстрее немножко правильнее :)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как будет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]