2010-10-21 6 views
1

Ok, disons que j'ai un objet ObservableCollection<string>. Au sein de cet objet que j'ai une variété de chaînes:Correspondance partielle d'une ObservableCollection <string> Objet

SomeString01 
SomeString-02 
somestring-03 
SOMESTRING.04 
aString 

Je veux prendre une entrée, nous l'appellerons pattern et le stocker sous forme de chaîne à partir d'une interface utilisateur, et faire une correspondance partielle sur la ObservableCollection. Je dois faire à la correspondance partielle sur la collection, et tout va être cas insensible. En fin de compte, je veux ceux-ci compilés dans un nouveau ObservableCollection. Donc, voici quelques exemples de cas:

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 

Quelle est la meilleure approche pour cela dans une application ClickOnce?

+2

ne peut pas vous utiliser un '.Lorsque (x =>)' sur la collection? –

+0

... et votre question est? – TalentTuner

+0

@saurabh ... quelle est la meilleure approche pour faire une correspondance partielle insensible à la casse sur la collection. Ai-je fait un mauvais travail en indiquant ma question? – Urda

Répondre

0

Ok En fait, je fouilla plus avec Google et a trouvé une meilleure solution:

Vous pouvez utiliser IndexOf() et passer StringComparison.OrdinalIgnoreCase

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

Mieux encore est en train de définir une nouvelle méthode d'extension pour chaîne:

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); 

Proposé par: JaredPar

Source: Case insensitive 'Contains(string)'


maintenant je l'ai mis en œuvre dans ma source comme suit:

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

Comme Gabes réponse dans les commentaires.

mais un peu plus spécifique

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

Quelle serait la différence d'utiliser cela par rapport à '.Where (x => x.IndexOf (pattern, StringComparison.OrdinalIgnoreCase> = 0)' ou est-ce 6 d'une façon, une demi-douzaine l'autre? – Urda

+0

http: // stackoverflow.com/questions/492799/difference-between-invariantculture-and-ordinal-string-comparision est une bonne écriture ... Je ne sais pas comment poster des liens dans les commentaires, mais de manière efficace, à peu près 6 d'une façon, une demi-douzaine L'autre –

Questions connexes