Согласно http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute.aspx :
[return: MarshalAs()]
public ISomething Foo()
{
return new MyFoo();
}
Да, строковые функции по умолчанию чувствительны к регистру. Обычно у них есть перегрузка, позволяющая указать тип сравнения строк, который вам нужен. Это также верно для IndexOf. Чтобы получить индекс вашей строки без учета регистра, вы можете сделать:
string blaBlah = "blaBlah";
int idx = blaBlah.IndexOf("blah", StringComparison.OrdinalIgnoreCase);
Сравнение строк .NET действительно чувствительно к регистру. Вы можете использовать такие вещи, как ToUpper (), чтобы нормализовать вещи перед их сравнением.
Одна вещь, которую я хотел бы добавить к существующим ответам (поскольку вы первоначально спрашивали об 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"];
По умолчанию они чувствительны к регистру, но большинство из них (если не все), включая IndexOf, имеют перегрузку, которая принимает аргумент StringComparison. Например, если вы передадите
StringComparison.InvariantCultureIgnoreCase
в качестве аргумента StringComparison в IndexOf, он (как следует из названия) проигнорирует различия в регистре