Учитываются ли регистровые операции .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 он будет (как следует из названия) игнорировать различия в случае