Например, я должен видеть, содержит ли строка подстроку, таким образом, я просто делаю:
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));
}
Вы не можете переопределить функцию, но вы можете создать для этого метод расширения :
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
}
(Конечно, вы могли бы назвать это «Содержит», как стандартный строковый метод, но я бы предпочел дать ему более явное имя, чтобы было очевидно, что вы проверка ...)
Почему бы не упростить задачу и не использовать метод расширения Any
?
string helloworld = "Hello World";
string[] items = { "He", "el", "lo" };
if (items.Any(item => helloworld.Contains(item)))
{
// do something
}