Сравнение строк OrdinalIgnoreCase для истинных ложных значений - PullRequest
4 голосов
/ 30 марта 2012

Имеет ли это смысл?MyValue может быть «true» или «false»

Разве это не должно быть Stringcomparison.OrdinalIgnoreCase?

MyValue.Equals("true", StringComparison.CurrentCultureIgnoreCase))

Ответы [ 3 ]

4 голосов
/ 30 марта 2012

Я бы этого не делал. То, что строка не равна "true", не означает, что она равна "false". Это простой способ пропустить неприятные ошибки. Я думаю, вам следует разобрать строку

bool value;
if(!Boolean.TryParse(MyValue, out value)) {
    // it did not parse
}
// it parsed

Это, скорее всего, будет правильно, и это более читабельно. Плюс, культурные проблемы просто оказались под ковром.

2 голосов
/ 30 марта 2012
1 голос
/ 30 марта 2012

Это действительно зависит от вашей ситуации и от того, как обрабатывается остальная часть вашей программы.Из документов OrdinalCompareCase

StringComparer, возвращаемый свойством OrdinalIgnoreCase, обрабатывает символы в строках для сравнения, как если бы они были преобразованы в верхний регистр с использованием соглашений инвариантной культуры,и затем выполняет простое сравнение байтов, которое не зависит от языка.Это наиболее уместно при сравнении строк, которые генерируются программно, или при сравнении ресурсов без учета регистра, таких как пути и имена файлов.

Таким образом, в основном, если значения не зависят от культуры (генерируются прогаматически и т. Д.), Используйте OrdinalIgnoreCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...