2009-11-02 12 views

Trả lời

28

Bạn chưa chỉ định nền tảng, nhưng tôi đoán .NET. Tôi mạnh mẽ khuyên bạn nên sử dụng dạng sau - vì các so sánh trường hợp không đơn giản như bạn mong đợi. (Nó cũng tránh tạo thêm chuỗi, nhưng đó là một vấn đề khác.)

Ví dụ: bạn muốn mã của mình làm gì khi được hiển thị bằng "thư" và "MAIL" khi chạy ở Thổ Nhĩ Kỳ? Nếu bạn sử dụng ToLower, giá trị này sẽ trả về false và tương tự như vậy nếu bạn sử dụng CurrentCultureIgnoreCase - nhưng nếu bạn sử dụng InvariantCultureIgnoreCase thì nó sẽ trả về true. Bạn cần phải suy nghĩ về nguồn dữ liệu và những gì bạn đang cố gắng đạt được với nó.

Xem recommendations for using strings trong MSDN để biết thêm thông tin và hướng dẫn.

Ngoài bất cứ điều gì khác, tôi muốn nói rằng điều sau thể hiện ý định của bạn hiệu quả hơn. Bạn không thực sự quan tâm đến các giá trị chữ thường của chuỗi - bạn quan tâm đến bình đẳng trong một case-insensitive cách ... đó là chính xác những gì hình thức thứ hai thể hiện.

+0

Bạn có thể giải thích ví dụ sâu sắc về "thư" và "MAIL" ở Thổ Nhĩ Kỳ không? Tại sao tôi nên mong đợi False trong trường hợp này? –

+3

@ValentynVynogradskiy: Bởi vì khi bạn viết hoa 'mail' ở Thổ Nhĩ Kỳ (sử dụng văn hóa/ngôn ngữ Thổ Nhĩ Kỳ), bạn không nhận được' MAIL' ... 'I' được viết hoa khác nhau. –

0

Tôi cảm thấy tốt hơn khi sử dụng cụm từ thứ hai so với phiên bản đầu tiên. Bởi vì, loại thứ hai sẽ được hỗ trợ ở tất cả các ngôn ngữ và sẽ thuận tiện hơn khi sử dụng.

5

Cuộc gọi Equals quy mô tốt hơn, vì nó là một trong những hoạt động chuỗi thay vì ba.

Bạn có được hiệu suất tốt nhất cho trường hợp insensetive so sánh với các tùy chọn StringComparison.OrdinalIgnoreCase. Tuy nhiên, vì nó không xem xét sự khác biệt về văn hóa nên nó có thể không phải lúc nào cũng đưa ra kết quả mà bạn muốn.

Nếu bạn muốn thay đổi trường hợp để so sánh, bạn nên sử dụng ToUpper thay vì ToLower. Một số chữ cái kỳ lạ không chuyển đổi đúng từ trên xuống dưới, nhưng chuyển đổi từ thấp hơn thành chữ hoa.

Trong hầu hết các trường hợp, hiệu suất là không quan trọng, vì vậy bạn nên sử dụng giải pháp thay thế có ý nghĩa nhất trong tình huống này.

Bạn chưa xác định ngôn ngữ mà bạn đang sử dụng, nhưng từ các nhà điều hành == nó trông giống như C#. Nếu bạn sử dụng VB, bạn nên xem xét toán tử = không sử dụng opreator bình đẳng của lớp chuỗi, nhưng logic của VB để so sánh, điều này hơi khác một chút.