2009-10-29 24 views
7

Tôi đang cố gắng tìm hiểu xem chuỗi có giá trị EndsWith một chuỗi khác không. 'Chuỗi khác' này là các giá trị từ một bộ sưu tập. Tôi đang cố gắng làm điều này như một phương pháp mở rộng, cho chuỗi.Làm thế nào tôi có thể sử dụng LINQ để xác định xem chuỗi này có EndsWith một giá trị (từ một bộ sưu tập) không?

ví dụ:

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

Trả lời

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

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

Bạn có thể tạo một phần mở rộng String để che giấu việc sử dụng 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 !!! tuyệt vời :) tôi yêu Linq. cảm ơn bạn đời :) –

0

Không có gì xây dựng trong khuôn khổ NET là nhưng đây là một phương pháp mở rộng mà sẽ làm các trick :

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

Chúc mừng andrew. vâng, đây là (nhiều hơn hoặc ít hơn) những gì tôi đã có. Tôi đã muốn xem làm thế nào để làm điều này như Linq (vì vậy tôi có thể tìm hiểu nó). –

+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; 
} 
} 
Các vấn đề liên quan