2010-10-21 3 views
1

Хорошо, допустим, у меня есть объект ObservableCollection<string>. В пределах этого объекта у меня есть множество строк:Частичное соответствие наблюдаемому набору <string> Объект

SomeString01 
SomeString-02 
somestring-03 
SOMESTRING.04 
aString 

Я хочу взять вход, мы будем называть его pattern и сохранить его в виде строки из интерфейса пользователя, и сделать некоторые частичное соответствие на ObservableCollection. Мне нужно сделать для частичного совпадения в коллекции, и все будет в случае нечувствительным. В конце концов, я хочу, чтобы они были скомпилированы в совершенно новый ObservableCollection. Итак, вот несколько примеров:

pattern = "SoME" 

// RESULTS: 
SomeString01 
SomeString-02 
somestring-03 
SOMESTRING.04 

/* --- */ 

pattern = "-0" 

// RESULTS: 
SomeString-02 
somestring-03 

/* --- */ 

pattern = "ING0" 

// RESULTS: 
SomeString01 

pattern = "s" 

// RESULTS: 
SomeString01 
SomeString-02 
somestring-03 
SOMESTRING.04 
aString 

Каков наилучший подход для этого в приложении ClickOnce?

+2

вы не можете использовать '.где (х =>)' на сборе? –

+0

... и на ваш вопрос? – TalentTuner

+0

@saurabh ... Каков наилучший подход, чтобы сделать нечувствительное к регистру частичное совпадение коллекции. Неужели я плохо справлялся с вопросом? – Urda

ответ

0

Хорошо, я на самом деле порылся больше с Google, и нашел лучшее решение:

Вы можете использовать IndexOf() и передать StringComparison.OrdinalIgnoreCase

string title = "STRING"; 
bool contains = title.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0; 

Еще лучше определить новый метод расширения для строка:

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

string title = "STRING"; 
bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase); 

Составитель: JaredPar

Источник: Case insensitive 'Contains(string)'


Так что теперь я реализовал это в моем источнике следующим образом:

foreach (string source in SourceStrings) 
{ 
    // Code for some pre-reqs here 

    if (source.IndexOf(Pattern, StringComparison.OrdinalIgnoreCase) >= 0) 
    { 
     subset.Add(source); 
    } 

    // Finish up anything else I had to do here 
} 
1

Как Gabes ответ в комментариях.

, но немного более конкретно

.Where(x => x.IndexOf("Some",StringComparison.InvariantCultureIgnoreCase) != -1) 
+0

Какая разница в использовании этого в сравнении с .Where (x => x.IndexOf (pattern, StringComparison.OrdinalIgnoreCase> = 0) '? Или это 6 в одну сторону, полдюжины других? – Urda

+0

http: // stackoverflow.com/questions/492799/difference-between-invariantculture-and-ordinal-string-comparision - хорошая запись. Я не знаю, как эффективно размещать ссылки в комментариях. Практически 6 в одну сторону, полдюжины другой –

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