5

Par exemple, je dois voir si une chaîne contient une sous-chaîne, donc je fais juste:Comment passer outre les fonctions de la classe String en C#

String helloworld = "Hello World"; 
if(helloworld.Contains("ello"){ 
    //do something 
} 

mais si j'ai un tableau d'éléments

String helloworld = "Hello World"; 
String items = { "He", "el", "lo" }; 

Je devais créer une fonction dans la classe String qui retournerait true si l'un des éléments contenait la chaîne, par exemple.

Je voudrais remplacer la fonction Contient (chaîne) par Contient (IEnumerable) pour ce scénario, au lieu de créer une fonction dans une autre classe. Est-il possible de faire cela, et si oui, comment pouvons-nous remplacer la fonction? Merci beaucoup.

va donc ici la solution complète (de merci les gars):

public static bool ContainsAny(this string thisString, params string[] str) { 
    return str.Any(a => thisString.Contains(a)); 
} 
+0

Il est recommandé d'accepter une réponse si c'est "ce dont vous avez juste besoin". :-) – CesarGon

+0

@CesarGon: Je l'attendais pour corriger la faute de frappe. Merci. =) – Jronny

+0

Compris. :-) – CesarGon

Répondre

17

Vous ne pouvez pas remplacer la fonction, mais vous pouvez faire un extension method pour cela:

public static class StringExtensions { 
    public static bool ContainsAny(this string theString, IEnumerable<string> items) 
    { 
     // Add your logic 
    } 
} 

Vous seriez alors appelez cela comme une méthode normale sur une chaîne, à condition de référencer l'assembly et d'inclure l'espace de noms:

String helloworld = "Hello World"; 
String[] items = new string[] { "He", "el", "lo" }; 

if (helloworld.ContainsAny(items)) { 
    // Do something 
} 

(Accordé, vous pourriez appeler cela "Contient", comme la méthode de chaîne standard, mais je préférerais lui donner un nom plus explicite donc c'est évident ce que vous vérifiez ...)

+0

Merci beaucoup. C'est ce dont j'avais juste besoin. – Jronny

+0

BTW, les fonctions doivent être statiques aussi bien? – Jronny

+0

@Jronny: Oui - C'était une faute de frappe dans mon message. Merci de l'avoir signalé (je l'ai corrigé maintenant). –

4

Pourquoi ne pas garder les choses simple et utiliser le Any extension method?

string helloworld = "Hello World"; 
string[] items = { "He", "el", "lo" }; 
if (items.Any(item => helloworld.Contains(item))) 
{ 
    // do something 
} 
+0

c'est plus simple si nous faisons simplement if (string.Contains (items)) ... Mais je pourrais utiliser votre code dans la fonction. Merci. – Jronny