2011-06-23 38 views
6

Tôi chỉ thấy rằng mã này không chỉ biên dịch, có vẻ như chia chuỗi trên bất kỳ khoảng trống nào.Đây có phải là ghi đè không có giấy tờ của phương pháp Tách không?

List<string> TableNames = Tables.Split().ToList(); 

Tuy nhiên nó không hiển thị trong phần intellisense và không nằm trên MSDN page.

Đây có phải chỉ là ghi đè không có giấy tờ không? Và có nguy hiểm khi sử dụng vì điều đó không?

Trả lời

10

Đó không phải là ghi đè. Trong trường hợp này, trình biên dịch dịch Split() thành Split(char[]) với tham số trống.

Chia is defined như

public string[] Split(
    params char[] separator 
) 

params phép bạn chỉ định một số biến của tham số, trong đó có không có đối số nào cả. Khi không có đối số nào được cung cấp (như trong ví dụ của bạn), mảng separator sẽ trống.

Từ trang MSDN liên kết ở trên:

Nếu tham số phân cách là null hoặc không chứa ký tự, ký tự trắng-không gian được giả định là các dấu phân cách.

Đây là lý do tại sao bạn thấy chuỗi được chia thành khoảng trắng. Đây chỉ là hành vi mặc định chứ không phải là một tính năng không có giấy tờ, vì vậy bạn có thể sử dụng nó mà không sợ các tác dụng phụ bất thường. Vâng, trừ khi thay đổi hành vi mặc định trong một phiên bản tương lai của .NET, nhưng điều đó có vẻ khá khó đối với tôi vì khoảng trống là một mặc định hợp lý.

+2

Đánh bại tôi sau mười lăm giây. Curses! (+1) :) –

+0

+1 Yep và 'ToList()' là một phương thức mở rộng từ 'System.Linq'. – rsbarro

+0

Rực rỡ và nhanh chóng! Đây là lý do tại sao tôi yêu StackOverflow. –

3

Từ remarks to String.Split:

Nếu tham số phân cách là Không có gì hoặc không chứa ký tự, màu trắng-không gian nhân vật được giả định là các delimiters. Ký tự khoảng trắng là được xác định theo tiêu chuẩn Unicode và trả về true nếu chúng được chuyển đến phương thức Char2IsWhiteSpace .

Tôi gọi đó là hành vi được ghi lại tài liệu. :)

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