5

Na przykład, muszę sprawdzić, czy ciąg zawiera podciąg, więc po prostu zrobić:Jak zastąpić funkcje z klasy String w C#

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

ale jeśli mam tablicę elementów

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

Potrzebowałem utworzyć funkcję wewnątrz klasy String, która zwróci wartość true, jeśli jeden z elementów w tablicy jest zawarty na przykład w łańcuchu.

Chciałbym zastąpić funkcję Zawiera (ciąg) z Contains (IEnumerable) dla tego scenariusza, zamiast tworzenia funkcji w innej klasie. Czy można to zrobić, a jeśli tak, jak możemy zastąpić tę funkcję? Dziękuję Ci bardzo.

Więc tu idzie kompletne rozwiązanie (dzięki chłopaki):

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

Dobrą praktyką jest akceptowanie odpowiedzi, jeśli jest to "to, czego właśnie potrzebujesz". :-) – CesarGon

+0

@CesarGon: Czekałem, aż poprawi literówkę. Dzięki. =) – Jronny

+0

Zrozumiano. :-) – CesarGon

Odpowiedz

17

Nie można zastąpić funkcję, ale można zrobić to extension method dla tego:

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

Można by następnie wywołaj to tak jak normalną metodę na ciągu znaków, pod warunkiem, że odwołasz się do zespołu i podasz przestrzeń nazw:

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

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

(Moglibyśmy nazwać to "Zawiera", podobnie jak standardową metodę łańcuchową, ale wolałbym nadać jej bardziej jednoznaczną nazwę, więc oczywiste jest, co sprawdzasz ...)

+0

Wielkie dzięki. Właśnie tego potrzebowałem. – Jronny

+0

BTW, funkcje muszą być statyczne zbyt dobrze? – Jronny

+0

@Jronny: Tak - to był literówka w moim poście. Dzięki za wskazanie (poprawiłem to teraz). –

4

Dlaczego nie trzymać rzeczy proste i korzystać z Any extension method?

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

jest prostsze, jeśli tylko zrobimy, jeśli (string.Contains (items)) ... Ale mogę użyć twojego kodu wewnątrz funkcji. Dzięki. – Jronny

Powiązane problemy