2013-07-10 4 views
56

Как я могу сделать следующий регистр нечувствительным?Как сделать String.Contains нечувствительным к регистру?

myString1.Contains("AbC") 
+1

Или дублировать статьи MSDN для [String.Contains] (HTTP: // MSDN. microsoft.com/en-us/library/dy85x1sa.aspx), который предлагает «См. также: IndexOf» ... –

+0

Ну, этот вопрос не является 100% -для повторения, если он запрашивает ответы в VB.Net, поскольку VB .Net имеет функции, которых у C# нет, например, оператор 'LIKE', который можно использовать здесь. – sloth

+0

Он отметил оба языка, поэтому, вероятно, он не заботится о том, какое решение есть, поэтому дубликат полностью ответит на этот вопрос. В любом случае, если он отредактирует свой вопрос с помощью onlt vb.net, он автоматически войдет в очередь повторного открытия. – SysDragon

ответ

10
bool b = list.Contains("Hello", StringComparer.CurrentCultureIgnoreCase); 
код

[EDIT] расширение:

public static bool Contains(this string source, string cont 
                , StringComparison compare) 
{ 
    return source.IndexOf(cont, compare) >= 0; 
} 

Это может работать :)

+13

Этот метод нет в стандарте C# –

+1

Это причина вопроса ... Спасибо @trippino – iGanja

+0

@trippino отредактировал мой ответ с кодом расширения – wudzik

39

Вы можете использовать:

if (myString1.IndexOf("AbC", StringComparison.OrdinalIgnoreCase) >=0) { 
    //... 
} 

Это работает с любой версией .NET ,

+3

Два опечатка в вашем ответе, в противном случае хорошие ;-) Это должно быть (очевидно) 'StringComparison.OrdinalIgnoreCase' – andreas

110

Вы можете создать свой собственный метод расширения, чтобы сделать это:

public static bool Contains(this string source, string toCheck, StringComparison comp) 
    { 
    return source != null && toCheck != null && source.IndexOf(toCheck, comp) >= 0; 
    } 

И тогда звоните:

mystring.Contains(myStringToCheck, StringComparison.OrdinalIgnoreCase); 
+2

Это, возможно, лучший ответ, обернув его в метод расширения. –

+6

@ Moo-Juice Да, потому что это знакомо :) http://stackoverflow.com/a/444818/447156 –

+4

Я бы рекомендовал вызывать функцию чем-то отличным от точного совпадения с чем-то в рамках, вроде ваших инициалов + Содержит. Я использую этот подход для множества вещей. Мои инициалы - это PS, поэтому у меня есть psContains, psStartsWith, psEndsWith и т. Д. Причина, по которой я думаю, что она должна быть другой, так вы можете сказать, просто прочитав код, что он собирается делать. Кроме того, если подписи совместимы, компилятор может не понравиться. Если они достаточно совместимы, компиляция не поможет найти вас, если ваши расширения находятся в игре. Расширения - настоящая жемчужина Dotnet. Если используется правильно :) –

Смежные вопросы