Bạn có thể sử dụng phương pháp mở rộng .Contains()
từ System.Linq namespace:
if (abc.ToLower().Contains('s')) { }
Và không, để kiểm tra xem một biểu thức boolean là đúng, bạn không cần phải == true
Kể từ khi Contains
phương pháp là một phương pháp mở rộng, giải pháp của tôi dường như gây nhầm lẫn cho một số. Dưới đây là hai phiên bản mà không yêu cầu bạn thêm using System.Linq;
:
if (abc.ToLower().IndexOf('s') != -1) { }
// or:
if (abc.IndexOf("s", StringComparison.CurrentCultureIgnoreCase) != -1) { }
Cập nhật
Nếu bạn muốn, bạn có thể viết phương pháp mở rộng của riêng bạn để tái sử dụng dễ dàng hơn:
public static class MyStringExtensions
{
public static bool ContainsAnyCaseInvariant(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.InvariantCultureIgnoreCase) != -1;
}
public static bool ContainsAnyCase(this string haystack, char needle)
{
return haystack.IndexOf(needle, StringComparison.CurrentCultureIgnoreCase) != -1;
}
}
Sau đó, bạn có thể gọi nó như sau:
if (def.ContainsAnyCaseInvariant('s')) { }
// or
if (def.ContainsAnyCase('s')) { }
Trong hầu hết các trường hợp khi xử lý dữ liệu người dùng, bạn thực sự muốn sử dụng CurrentCultureIgnoreCase
(hoặc phương thức mở rộng ContainsAnyCase
), vì cách đó bạn để hệ thống xử lý các vấn đề trên/chữ thường phụ thuộc vào ngôn ngữ. Khi giao dịch với các vấn đề tính toán, như tên của các thẻ HTML và vân vân, bạn muốn sử dụng văn hóa bất biến.
Ví dụ: Trong Thổ Nhĩ Kỳ, các chữ cái viết hoa I
trong chữ thường là ı
(không có một dấu chấm), và không i
(với một dấu chấm).
Hmm, tôi không tìm thấy một tình trạng quá tải của String.Contains mà phải mất một lập luận char. –
@ScottSmith Đây là một phương pháp mở rộng được định nghĩa trong [System.Linq] (http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx). Bạn cần phải thêm 'using System.Linq;' – pauloya
Tôi thích sử dụng 'str.IndexOf ('s')> = 0' nhưng nó có lẽ chỉ là một sự khác biệt về phong cách. Nó có ý nghĩa hơn với tôi khi đọc hiểu. – CSS