Как я могу использовать Linq, чтобы определить, заканчивается ли эта строка значением (из коллекции)?


Я пытаюсь выяснить, является ли строковое значение EndsWith другой строкой. Эта "другая строка" - значения из коллекции. Я пытаюсь сделать это как метод расширения для строк.

Напр.

var collection = string[] { "ny", "er", "ty" };
"Johnny".EndsWith(collection); // returns true.
"Fred".EndsWith(collection); // returns false.
3 7

3 ответа:

var collection = new string[] { "ny", "er", "ty" };

var doesEnd = collection.Any("Johnny".EndsWith);
var doesNotEnd = collection.Any("Fred".EndsWith);

Вы можете создать расширение строки, чтобы скрыть использование Any

public static bool EndsWith(this string value, params string[] values)
{
    return values.Any(value.EndsWith);
}

var isValid = "Johnny".EndsWith("ny", "er", "ty");

В .NET framework нет ничего встроенного, но вот метод расширения, который сделает трюк:

public static Boolean EndsWith(this String source, IEnumerable<String> suffixes)
{
    if (String.IsNullOrEmpty(source)) return false;
    if (suffixes == null) return false;

    foreach (String suffix in suffixes)
        if (source.EndsWith(suffix))
            return true;

    return false;
}
public static class Ex{
 public static bool EndsWith(this string item, IEnumerable<string> list){
   foreach(string s in list) {
    if(item.EndsWith(s) return true;
   }
   return false;
 }
}