Строковые литералы имеют формальный тип char []
, но семантический тип const char []
. Пуристы ненавидят его, но это вообще полезно и безвредно, за исключением того, что приносят много новичков к SO с «ПОЧЕМУ МОЙ ПРОГРАММИРУЮЩИЙ ПРОГРАММА?!?!» вопросы.
Из MSDN" Новые Рекомендации для Использования Строк в Microsoft.NET 2.0 "
Сводка: Кодируйте владельцев, ранее использующих
InvariantCulture
для сравнения строк, преобразования регистра, и сортировка должна сильно рассмотреть использование нового набораString
перегрузки в Microsoft.NET 2.0. А именно, данные, которые разработаны, чтобы быть агностическими культурой и лингвистически не важные , должны начать определять перегрузки с помощью илиStringComparison.Ordinal
илиStringComparison.OrdinalIgnoreCase
члены новогоStringComparison
перечисление. Они осуществляют сравнение байта байтом, подобноеstrcmp
, который не только избегает ошибок от лингвистической интерпретации чрезвычайно символьных строк, но обеспечивает лучшую производительность.
MSDN предоставляет некоторые довольно четкие рекомендации об этом: http://msdn.microsoft.com/en-us/library/ms973919.aspx
Я предполагаю, что это зависит от Вашей ситуации. Так как порядковые сравнения на самом деле смотрят на числовые значения Unicode символов, они не будут лучшим выбором, когда Вы отсортируете в алфавитном порядке. Для сравнений строк, тем не менее, порядковых, было бы немного быстрее.
Это зависит от того, что Вы хотите, хотя я уклонился бы от invariantculture, если Вы не будете очень уверены, что Вы никогда не будете хотеть локализовать код для других языков. Используйте CurrentCulture вместо этого.
кроме того, OrdinalIgnoreCase должен уважать числа, которые могут или не могут быть тем, что Вы хотите.