2010-08-04 27 views
6

String.IsNullOrEmpty() dường như là một phương pháp được sử dụng rất tốt và tôi thấy mình muốn có một số viết tắt cho nó. Một cái gì đó giống như ??? vì nó sẽ được sử dụng trong một bối cảnh tương tự như toán tử kết hợp null nhưng được mở rộng để kiểm tra các chuỗi rỗng cũng như rỗng. I E.Có trường hợp nào cho toán tử String.IsNullOrEmpty không?

string text = something.SomeText ??? "Not provided"; 

Bạn có ý kiến ​​gì về điều này? Nó sẽ không cần thiết làm nổi bật ngôn ngữ? Liệu nó có mở cửa cho các hoạt động trung cấp khác được cấp phép tích hợp sâu như vậy với trình biên dịch không? Hoặc nó sẽ là một bổ sung hữu ích cho ngôn ngữ.

+7

Không phản đối ý tưởng, nhưng sợ khi nghĩ đến?, ??, ???, ????, ?????, ??????, ??????? vv – taylonr

+3

nó đạt được những gì? mục đích của một ngôn ngữ không phải là kết hợp mọi câu lệnh vào một dòng duy nhất .... hay là nó? Hãy tưởng tượng các chương trình dòng duy nhất .... –

+0

Các ngôn ngữ C# có rất nhiều đặc biệt 'kiến thức chuỗi' (xem làm thế nào ' "chuỗi" + "nối" + "công trình"') –

Trả lời

15

Phil Haack blogged about this một thời gian trước đây. Về cơ bản, ông gợi ý một phương pháp mở rộng trên string cho phép bạn làm

var text = someString.AsNullIfEmpty() ?? "Not provided."; 

Phương pháp mở rộng là rất đơn giản:

public static string AsNullIfEmpty(this string str) 
{ 
    return !string.IsNullOrEmpty(str) ? str : null; 
} 

Ông cũng gợi ý một phiên bản kiểm tra các khoảng trắng thay vì chỉ có sản phẩm nào với phương pháp string.IsNullOrWhitespace() từ .NET 4, cũng như các phần mở rộng tương tự cho giao diện IEnumerable<T>.

Ông cũng nói về việc giới thiệu các nhà khai thác mới như ??? cho điều này, nhưng kết luận rằng sẽ khó hiểu hơn là hữu ích - sau tất cả, giới thiệu các phương pháp mở rộng này bạn có thể làm điều tương tự, nhưng dễ đọc hơn và cú pháp viết tắt là "mọi người đã biết".

+0

Vấn đề là, với tư cách là các nhà phát triển, chúng tôi bị treo trên những kẻ theo đuổi geeky. Hãy tự hỏi, "điều này sẽ giúp người dùng của phần mềm này", "điều này sẽ làm cho một dòng dưới cùng tốt hơn cho công ty sử dụng phần mềm này" ??? –

+0

nếu bạn muốn giới thiệu phương pháp khuyến nông mới, có lẽ phiên bản này sẽ thể hiện rõ ràng hơn intensions StringExtensions lớp tĩnh { công static string ValueOrDefault (chuỗi giá trị này, chuỗi defaultValue) { trở string.IsNullOrEmpty (giá trị)? defaultValue: value; } } – desco

+0

@Mitch: Lý do chính để giới thiệu các phương pháp mở rộng này không phải là (chỉ) để làm cho mã này trông đẹp - nó cũng là để giảm sự lặp lại mã. Đã bao nhiêu lần bạn thấy mình muốn kiểm tra một chuỗi cho 'null', trống hoặc khoảng trống và cung cấp giá trị mặc định nếu cần? Tôi làm việc đó mọi lúc. Và với các phương pháp mở rộng này, tôi * tiết kiệm thời gian khi viết phần mềm *, mà lợi ích (ít nhất) công ty tôi viết phần mềm cho. –

6

Phil Haack nói về hoạt động chính xác này trên blog của mình. Bạn nên xem bài viết của mình Null Or Empty Coalescing.

khai thác mục đích đặc biệt như ??? là một dốc trơn trượt. Tại sao dừng lại ở đó - tại sao không giới thiệu nhà điều hành "null hoặc trống hoặc khoảng trắng": ????. Phil nói về điều này, thực sự, trong bài viết của mình. Kết luận chung của ông là các nhà khai thác như vậy sẽ khó hiểu hơn là hữu ích.

Cuối cùng bạn có thể mất nhiều thao tác khác nhau một phát minh các nhà khai thác để đại diện cho họ - không may, mà nhiều khả năng sẽ phá hủy khả năng đọc của ngôn ngữ.

+0

Sigh ... chỉ vì tôi muốn loại ra một vài ví dụ, bạn đánh bại tôi ít hơn một phút ...! ;) –

+0

@Tomas: Nó dường như không làm tổn thương điểm số của bạn về câu hỏi này. Công việc tốt. – LBushkin

Các vấn đề liên quan