5

Per esempio, ho bisogno di vedere se una stringa contiene una stringa, quindi ho solo fare:Come ignorare le funzioni di classe String in C#

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

ma se ho un array di oggetti

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

Avevo bisogno di creare una funzione all'interno della classe String che restituisse true se uno degli elementi all'interno dell'array è contenuto nella stringa, ad esempio.

Vorrei eseguire l'override della funzione Contains (stringa) con Contains (IEnumerable) per questo scenario, invece di creare una funzione in un'altra classe. È possibile farlo e, in tal caso, come possiamo ignorare la funzione? Grazie mille.

quindi ecco qui la soluzione completa (grazie ragazzi):

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

È buona norma accettare una risposta se è "ciò di cui hai appena bisogno". :-) – CesarGon

+0

@CesarGon: stavo aspettando che correggesse l'errore di battitura. Grazie. =) – Jronny

+0

Capito. :-) – CesarGon

risposta

17

Non è possibile sostituire la funzione, ma si può fare un extension method per questo:

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

Farebbe quindi chiamalo come un normale metodo su una stringa, purché faccia riferimento all'assembly e includi lo spazio dei nomi:

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

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

(È possibile chiamare questo "Contiene", come il metodo di stringa standard, ma preferirei assegnargli un nome più esplicito quindi è ovvio cosa stai controllando ...)

+0

Grazie mille. Questo è quello di cui avevo bisogno. – Jronny

+0

BTW, le funzioni devono essere statiche anche a destra? – Jronny

+0

@Jronny: Sì, è stato un errore di battitura nel mio post. Grazie per avermelo fatto notare (l'ho corretto ora). –

4

Perché non conservare le cose semplice e utilizzare il Any extension method?

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

è più semplice se lo facciamo solo se (string.Contains (items)) ... Ma potrei usare il tuo codice all'interno della funzione. Grazie. – Jronny

Problemi correlati