Danh mục

Các giải pháp lập trình CSharp- P7

Số trang: 10      Loại file: pdf      Dung lượng: 2.63 MB      Lượt xem: 16      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: 1,000 VND Tải xuống file đầy đủ (10 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các giải pháp lập trình CSharp- P7: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P7 61 Chương 2: Thao tác dữ liệuH ầu hết các ứng dụng đều cần thao tác trên một loại dữ liệu nào đó. Microsoft .NET Framework cung cấp nhiều kỹ thuật để đơn giản hóa hay nâng cao hiệu quả các thao tác dữ liệu thông dụng. Chương này sẽ đề cập các kỹ thuật sau:  Thao tác chuỗi một cách hiệu quả (mục 2.1).  Mô tả các kiểu dữ liệu cơ sở bằng các kiểu mã hóa khác nhau (mục 2.2, 2.3, và 2.4).  Sử dụng biểu thức chính quy để xác nhận tính hợp lệ và thao tác chuỗi (mục 2.5 và 2.6).  Làm việc với ngày và giờ (mục 2.7 và 2.8).  Làm việc với mảng và tập hợp (mục 2.9, 2.10, và 2.11).  Tuần tự hóa trạng thái đối tượng và lưu nó vào file (mục 2.12).1. Thao tác chuỗi một cách hiệu quả Bạn cần thao tác trên nội dung của một đối tượng String và tránh chi phí của việc tự động tạo các đối tượng String mới do tính không đổi của đối tượng String. Sử dụng lớp System.Text.StringBuilder để thực hiện các thao tác, sau đó chuyển kết quả thành String bằng phương thức StringBuilder.ToString.Các đối tượng String trong .NET là không đổi, nghĩa là một khi đã được tạo thì chúng khôngthể bị thay đổi. Ví dụ, nếu bạn tạo một String bằng cách nối một số ký tự hoặc chuỗi, thì khithêm một phần tử mới vào cuối String hiện có, bộ thực thi sẽ tạo ra một String mới chứa kếtquả (chứ không phải String cũ bị thay đổi). Do đó sẽ nảy sinh chi phí đáng kể nếu ứng dụngcủa bạn thường xuyên thao tác trên String.Lớp StringBuilder khắc phục vấn đề này bằng cách cung cấp một bộ đệm ký tự, và cho phépthao tác trên nội dung của nó mà bộ thực thi không phải tạo đối tượng mới để chứa kết quảsau mỗi lần thay đổi. Bạn có thể tạo một đối tượng StringBuilder rỗng hoặc được khởi tạo lànội dung của một String hiện có. Sau đó, thao tác trên nội dung của StringBuilder này bằngcác phương thức nạp chồng (cho phép bạn chèn, thêm dạng chuỗi của các kiểu dữ liệu khácnhau). Cuối cùng, gọi StringBuilder.ToString để chuyển nội dung hiện tại củaStringBuilder thành một String.Khi bạn thêm dữ liệu mới vào chuỗi, có hai thuộc tính quan trọng ảnh hưởng đến hoạt độngcủa StringBuilder là Capacity và Length. Capacity mô tả kích thước của bộ đệmStringBuilder, còn Length mô tả kích thước của chuỗi ký tự trong bộ đệm. Nếu việc thêm dữliệu mới vào StringBuilder làm kích thước chuỗi (Length) vượt quá kích thước bộ đệm(Capacity) thì StringBuilder sẽ cấp phát bộ đệm mới để chứa chuỗi. Nếu thiếu cẩn thận, việccấp phát bộ đệm này có thể phủ định lợi ích của việc sử dụng StringBuilder. Do đó, nếu biếtchính xác kích thước của chuỗi, hoặc biết kích thước tối đa của chuỗi, bạn có thể tránh việccấp phát bộ đệm quá mức cần thiết bằng cách thiết lập thuộc tính Capacity hoặc chỉ định kíchthước bộ đệm lúc tạo StringBuilder. Khi thiết lập các thuộc tính Capacity và Length, cần chúý các điểm sau: 62 Chương 2: Thao tác dữ liệu • Nếu bạn thiết lập giá trị Capacity nhỏ hơn giá trị Length, thuộc tính Capacity sẽ ném ngoại lệ System.ArgumentOutOfRangeException. • Nếu bạn thiết lập giá trị Length nhỏ hơn kích thước của chuỗi hiện có trong bộ đệm, chuỗi sẽ bị cắt bớt phần lớn hơn. • Nếu bạn thiết lập giá trị Length lớn hơn kích thước của chuỗi, bộ đệm sẽ được lấp thêm các khoảng trắng cho bằng với Length. Việc thiết lập giá trị Length lớn hơn giá trị Capacity sẽ tự động điều chỉnh Capacity cho bằng với Length.Phương thức ReverseString dưới đây minh họa cách sử dụng lớp StringBuilder để đảo mộtchuỗi. Nếu không sử dụng lớp StringBuilder để thực hiện thao tác này thì sẽ tốn chi phí đángkể, đặc biệt khi chuỗi nguồn dài. Việc khởi tạo StringBuilder với kích thước bằng chuỗinguồn bảo đảm không cần phải cấp phát lại bộ đệm trong quá trình đảo chuỗi.public static string ReverseString(string str) { // Kiểm tra các trường hợp không cần đảo chuỗi. if (str == null || str.Length == 1) { return str; } // Tạo một StringBuilder với sức chứa cần thiết. System.Text.StringBuilder revStr = new System.Text.StringBuilder(str.Length); // Duyệt ngược chuỗi nguồn từng ký tự một // và thêm từng ký tự đọc được vào StringBuilder. for (int count = str.Length-1; count > -1; count--) { revStr.Append(str[count]); } // Trả về chuỗi đã được đảo. return revStr.ToString();}2. Mã hóa chuỗi bằng các kiểu mã hóa ký tự Bạn cần trao đổi dữ liệu dạng ký tự với các hệ thống sử dụng kiểu mã hóa khác với UTF-16 (kiểu mã hóa này được sử dụng bởi CRL ...

Tài liệu được xem nhiều: