2009-10-29 12 views
7

J'essaie de savoir si une valeur de chaîne EndsWith une autre chaîne. Cette 'autre chaîne' sont les valeurs d'une collection. J'essaie de faire cela comme une méthode d'extension, pour les chaînes.Comment puis-je utiliser Linq pour déterminer si cette chaîne se termine avec une valeur (à partir d'une collection)?

par ex.

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

Répondre

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

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

Vous pouvez créer une extension de chaîne pour cacher l'utilisation de Any

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

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

_any_ .. ah !!! génial :) j'aime Linq. merci mon pote :) –

0

Il n'y a rien construit pour le framework .NET, mais voici une méthode d'extension qui fera l'affaire :

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; 
} 
+0

Salut andrew. oui, c'est (plus ou moins) ce que j'ai déjà. Je voulais voir comment faire cela en tant que Linq (pour que je puisse l'apprendre). –

+0

snap! hahahah :-) –

0
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; 
} 
}