Как переопределить функции от Строкового класса в C#

Например, я должен видеть, содержит ли строка подстроку, таким образом, я просто делаю:

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

но если у меня есть массив объектов

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

Я должен был создать функцию в Строковом классе, который возвратит true, если любой из объектов в массиве будет содержаться в строке, например.

Я хотел бы переопределить функцию, Содержит (представляют в виде строки) с, Содержит (IEnumerable) для этого сценария, вместо того, чтобы создать функцию в другом классе. Действительно ли возможно сделать это, и если так, как мы можем переопределить функцию?Большое спасибо.

Таким образом, здесь идет полное решение (благодарит парней):

public static bool ContainsAny(this string thisString, params string[] str) {
    return str.Any(a => thisString.Contains(a));
}
5
задан Jronny 22 July 2010 в 02:35
поделиться

2 ответа

Вы не можете переопределить функцию, но вы можете создать для этого метод расширения :

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

Затем вы вызываете это как обычный метод в строка, при условии, что вы ссылаетесь на сборку и включаете пространство имен:

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

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

(Конечно, вы могли бы назвать это «Содержит», как стандартный строковый метод, но я бы предпочел дать ему более явное имя, чтобы было очевидно, что вы проверка ...)

17
ответ дан 18 December 2019 в 07:28
поделиться

Почему бы не упростить задачу и не использовать метод расширения Any ?

string helloworld = "Hello World";
string[] items = { "He", "el", "lo" };
if (items.Any(item => helloworld.Contains(item)))
{
    // do something
}
4
ответ дан 18 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: