5

Ví dụ, tôi cần phải xem một chuỗi có chứa một chuỗi con, vì vậy tôi chỉ cần làm:Làm thế nào để ghi đè lên các chức năng từ lớp String trong C#

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

nhưng nếu tôi có một loạt các mặt hàng

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

Tôi cần thiết để tạo một hàm bên trong lớp String sẽ trả về true nếu một trong hai ví dụ các mục bên trong mảng được chứa trong chuỗi đó.

Tôi muốn ghi đè hàm chứa Chứa (chuỗi) có chứa (IEnumerable) cho trường hợp này, thay vì tạo hàm trong lớp khác. Có thể làm điều này, và nếu có, làm cách nào chúng ta có thể ghi đè lên hàm? Cảm ơn nhiều.

Vì vậy, ở đây đi là giải pháp đầy đủ (nhờ chàng trai):

public static bool ContainsAny(this string thisString, params string[] str) { 
    return str.Any(a => thisString.Contains(a)); 
} 
+0

Thực tiễn tốt là chấp nhận câu trả lời nếu đó là "những gì bạn cần". :-) – CesarGon

+0

@CesarGon: Tôi đang đợi anh sửa lỗi đánh máy. Cảm ơn. =) – Jronny

+0

Đã hiểu. :-) – CesarGon

Trả lời

17

Bạn không có thể ghi đè các chức năng, nhưng bạn có thể làm cho một extension method cho việc này:

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

bạn muốn sau đó gọi điều này giống như phương pháp bình thường trên một chuỗi, miễn là bạn tham chiếu đến hội đồng và bao gồm không gian tên:

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

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

(Được cấp, bạn có thể gọi điều này là "Chứa", như phương pháp chuỗi chuẩn, nhưng tôi muốn đặt tên rõ ràng hơn để hiển thị những gì bạn đang kiểm tra ...)

+0

Cảm ơn rất nhiều. Đây là những gì tôi cần. – Jronny

+0

BTW, các chức năng cần phải được tĩnh quá phải không? – Jronny

+0

@Jronny: Có - Đó là lỗi đánh máy trong bài đăng của tôi. Cảm ơn bạn đã chỉ ra (tôi đã sửa nó ngay bây giờ). –

4

Tại sao không giữ mọi thứ đơn giản và sử dụng Any extension method?

string helloworld = "Hello World"; 
string[] items = { "He", "el", "lo" }; 
if (items.Any(item => helloworld.Contains(item))) 
{ 
    // do something 
} 
+0

nó đơn giản hơn nếu chúng ta chỉ làm nếu (string.Contains (items)) ... Nhưng tôi có thể sử dụng mã của bạn bên trong hàm. Cảm ơn. – Jronny