Учитываются ли регистровые операции .NET?
Являются ли строковые функции .NET, например IndexOf("blah")
чувствительными к регистру?
Из того, что я помню, это не так, но почему-то я вижу ошибки в своем приложении, где текст в строке запроса находится в верблюжьем корпусе (например, UserID), и я тестирую IndexOf("userid")
.
Ответы
Ответ 1
Да, строковые функции по умолчанию чувствительны к регистру. Обычно они имеют перегрузку, которая позволяет указать тип нужного сравнения строк. Это также верно для IndexOf. Чтобы получить индекс вашей строки без учета регистра, вы можете:
string blaBlah = "blaBlah";
int idx = blaBlah.IndexOf("blah", StringComparison.OrdinalIgnoreCase);
Ответ 2
Одна вещь, которую я хотел бы добавить к существующим ответам (поскольку вы изначально спрашивали об ASP.NET):
Некоторые коллекции имен и значений, такие как Request.QueryString и, возможно, также Request.Form, не чувствительны к регистру. Например, если я перейду на страницу ASPX, используя следующий URL
http://server/mypage.aspx?user=admin
то обе следующие строки вернут "admin":
var user1 = Request.QueryString["user"];
var user2 = Request.QueryString["USER"];
Ответ 3
Сравнение строк .NET действительно чувствительно к регистру. Вы можете использовать такие вещи, как ToUpper(), чтобы нормализовать вещи, прежде чем сравнивать их.
Ответ 4
По умолчанию они чувствительны к регистру, но большинство из них (если не все), включая IndexOf, имеют перегрузку, которая принимает аргумент StringComparison. Например. если вы пройдете
StringComparison.InvariantCultureIgnoreCase
в качестве аргумента StringComparison для IndexOf он будет (как следует из названия) игнорировать различия в случае