5

Por ejemplo, tengo que ver si una cadena contiene una subcadena, por lo que sólo lo hacen:Cómo reemplazar las funciones de clase String en C#

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

pero si tengo una serie de artículos

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

Necesitaba crear una función dentro de la clase String que devolviera verdadero si los elementos dentro de la matriz están contenidos en la cadena, por ejemplo.

Me gustaría sobrescribir la función Contiene (cadena) con Contiene (IEnumerable) para este escenario, en lugar de crear una función en otra clase. ¿Es posible hacer esto, y si es así, cómo podemos anular la función? Muchas gracias.

Así que aquí va la solución completa (gracias chicos):

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

Es una buena práctica aceptar una respuesta si es "lo que acaba de necesitar". :-) – CesarGon

+0

@CesarGon: Estaba esperando que él corrigiera el error tipográfico. Gracias. =) – Jronny

+0

Entendido. :-) – CesarGon

Respuesta

17

No se puede reemplazar la función, pero se puede hacer una extension method para esto:

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

Usted sería entonces llame esto como un método normal en una cadena, siempre que haga referencia al ensamblado e incluya el espacio de nombres:

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

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

(De acuerdo, podría llamar a esto "Contiene", como el método de cadena estándar, pero preferiría darle un nombre más explícito, así que es obvio lo que está comprobando ...)

+0

Muchas gracias. Esto es lo que necesitaba. – Jronny

+0

Por cierto, las funciones también deben ser estáticas, ¿verdad? – Jronny

+0

@Jronny: Sí, fue un error tipográfico en mi publicación. Gracias por señalarlo (lo he corregido ahora). –

4

¿Por qué no mantener las cosas? simple y usa el Any extension method?

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

es más simple si solo hacemos si (string.Contains (items)) ... Pero podría usar tu código dentro de la función. Gracias. – Jronny

Cuestiones relacionadas