C#

C# Почему возвращает false?

 Console.WriteLine(string.IsNullOrWhiteSpace("​​ㅤ")); 
 C++
int main()
{
wstring str = L"​​ㅤ";
for (int i = 0; i < str.size(); i++) cout
Руслан Какиров
Руслан Какиров
51 417
Лучший ответ
Андрей Царёв Как с этим бороться?
Тут написано, какие именно символы считаются пробельными:
https://learn.microsoft.com/en-us/dotnet/api/system.char.iswhitespace?view=net-7.0
Дима Зинченко
Дима Зинченко
67 513
Тоже мне загадка
примерно в стиле почему
Console.WriteLine("й"=="й");
выдает false
https://onlinegdb.com/iPpbi8Kra

Если в строку прописать "невидимые" UNICODE символы так и должно работать
Андрей Царёв Это легко
 Console.WriteLine("й".Normalize() == "й".Normalize()); 
символ юникода можно получить несколькими способами. в 1 случае буква й. Во втором буква "и" и символ модификатор. Нужно нормализовать строки юникода и проблем не будет
откуда мне знать что в string
Андрей Царёв
 "ㅤ" 
этот символ
Код "​​ㅤ" представляет собой невидимый символ Unicode - U+3164, который называется "Hangul Filler".

Метод `string.IsNullOrWhiteSpace()` возвращает значение true, если переданная строка является `null`, пустой или содержит только пробельные символы, такие как пробел, новая строка, табуляция и т.д.

Хотя символ "Hangul Filler" не виден, он не является пробельным символом, поэтому метод `string.IsNullOrWhiteSpace("​​ㅤ")` вернет значение false.
Андрей Царёв как можно работать с такими символами? Как считать их за пробел?
Дело в ошибке компилятора, либо Вы предоставляете нам неверную информацию.
Андрей Царёв Скопируй эту строчку и сам посмотри вывод
Ну во-первых для этого надо знать основные принципы ооп:
Абстракция. Моделирование требуемых атрибутов и взаимодействий сущностей в виде классов для определения абстрактного представления системы.
Инкапсуляция. Скрытие внутреннего состояния и функций объекта и предоставление доступа только через открытый набор функций.
Наследование. Возможность создания новых абстракций на основе существующих.
Полиморфизм. Возможность реализации наследуемых свойств или методов отличающимися способами в рамках множества абстракций.
Далее надо разобраться с делегатами и интерфейсами:
Делегат — это тип, который представляет ссылки на методы с определенным списком параметров и типом возвращаемого значения. При создании экземпляра делегата этот экземпляр можно связать с любым методом с совместимой сигнатурой и типом возвращаемого значения. Метод можно вызвать (активировать) с помощью экземпляра делегата.
Интерфейс определяет контракт. Любой class или struct, реализующий этот контракт, должен предоставлять реализацию для членов, определенных в интерфейсе. Интерфейс может определять реализацию по умолчанию для членов.

Ну а дальше уже сам разберёшься