1. Trang chủ
  2. » Công Nghệ Thông Tin

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

10 369 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các Giải Pháp Lập Trình Csharp- P8 Pot
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài Luận
Năm xuất bản 2025
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 10
Dung lượng 2,65 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cú pháp của biểu thức chính quy sẽ chỉ định Regex so trùng toàn bộ chuỗi hay chỉ so trùng một phần của chuỗi xem ^, \A, $, và \z trong bảng 2.2 Phương thức ValidateInput dưới đây minh họ

Trang 1

| Ngăn cách các biểu thức có thể so trùng, ví dụ AAA|ABA|ABB sẽ so trùng với

AAA, ABA, hoặc ABB (các biểu thức được so trùng từ trái sang)

[abc] So trùng với một trong các ký tự trong nhóm, ví dụ [AbC] sẽ so trùng với A,

b, hoặc C

[^abc] So trùng với bất cứ ký tự nào không thuộc các ký tự trong nhóm, ví dụ

[^AbC] sẽ không so trùng với A, b, or C nhưng so trùng với B, F,…

[a-z] So trùng với bất kỳ ký tự nào thuộc khoảng này, ví dụ [A-C] sẽ so trùng với

A, B, hoặc C

( ) Xác định một biểu thức con sao cho nó được xem như một yếu tố đơn lẻ

đối với các yếu tố được trình bày trong bảng này

? Xác định có một hoặc không có ký tự hoặc biểu thức con đứng trước nó, ví

dụ A?B so trùng với B, AB, nhưng không so trùng với AAB

* Xác định không có hoặc có nhiều ký tự hoặc biểu thức con đứng trước nó,

ví dụ A*B so trùng với B, AB, AAB, AAAB,…

+ Xác định có một hoặc có nhiều ký tự hoặc biểu thức con đứng trước nó, ví

dụ A+B so trùng với AB, AAB, AAAB,… nhưng không so trùng với B

{n} Xác định có đúng n ký tự hoặc biểu thức con đứng trước nó, ví dụ A{2} chỉ

so trùng với AA

{n,} Xác định có ít nhất n ký tự hoặc biểu thức con đứng trước nó, ví dụ A{2,}

so trùng với AA, AAA, AAAA,… nhưng không so trùng với A

{n, m} Xác định có từ n đến m ký tự đứng trước nó, ví dụ A{2,4} so trùng với AA,

AAA, và AAAA nhưng không so trùng với A hoặc AAAAA Khi dữ liệu cần kiểm tra càng phức tạp thì cú pháp của biểu thức chính quy cũng càng phức tạp Ví dụ, dễ dàng kiểm tra dữ liệu nhập chỉ chứa số hay có chiều dài tối thiểu, nhưng kiểm

tra một URL khá phức tạp Bảng 2.3 liệt kê một số biểu thức chính quy dùng để kiểm tra các

kiểu dữ liệu thông dụng

Bảng 2.3 Một số biểu thức chính quy thông dụng

Kiểu dữ liệu nhập Mô tả Biểu thức chính quy

Số Chỉ chứa các chữ số thập phân; ví dụ

PIN Chứa 4 chữ số thập phân,ví dụ

Mật khẩu đơn giản Chứa từ 6 đến 8 ký tự; ví dụ ghtd6f

Số thẻ tín dụng

Chứa dữ liệu phù hợp với cấu trúc của hầu hết các loại số thẻ tín dụng,

ví dụ 4921835221552042 hoặc

4921-8352-2155-2042

^\d{4}-?\d{4}-?\d{4}- ?

\d{4}$

Trang 2

Địa chỉ e-mail

[\w-]+ nghĩa là chứa một hoặc nhiều ký tự word hoặc dấu gạch ngang, ví dụ

some-body@adatum.com

^[\w-]+@([\w- ] +\.)+[\w-]+$

HTTP hoặc HTTPS

URL

Dữ liệu là một URL dựa-trên-HTTP hay dựa-trên-HTTPS, ví dụ

http://www.microsoft.com

^https?://([\w- ] +\.)+[\w-]+(/[\w- / ?

%=]*)?$

Một khi đã biết cú pháp của biểu thức chính quy, bạn tạo một đối tượng

System.Text.RegularExpression.Regex bằng cách truyền cho phương thức khởi dựng của nó chuỗi chứa biểu thức chính quy Sau đó, gọi phương thức IsMatch của đối tượng Regex và truyền chuỗi cần kiểm tra, phương thức này trả về một giá trị luận lý cho biết chuỗi có hợp lệ không Cú pháp của biểu thức chính quy sẽ chỉ định Regex so trùng toàn bộ chuỗi hay chỉ so trùng một phần của chuỗi (xem ^, \A, $, và \z trong bảng 2.2)

Phương thức ValidateInput dưới đây minh họa cách kiểm tra chuỗi nhập bằng biểu thức chính quy:

public static bool ValidateInput(string regex, string input) {

// Tạo đối tượng Regex dựa trên biểu thức chính quy.

Regex r = new Regex(regex);

// Kiểm tra dữ liệu nhập có trùng với biểu thức chính quy hay không.

return r.IsMatch(input);

}

Bạn có thể sử dụng đối tượng Regex để kiểm tra nhiều chuỗi, nhưng không thể thay đổi biểu thức chính quy được gắn cho nó; bạn phải tạo một đối tượng Regex mới tương ứng với một cấu trúc mới Phương thức ValidateInput ở trên tạo ra một đối tượng Regex mới mỗi lần được gọi, thay vào đó bạn có thể sử dụng phương thức tĩnh nạp chồng IsMatch

public static bool ValidateInput(string regex, string input) {

// Kiểm tra dữ liệu nhập có trùng với biểu thức chính quy hay không.

return Regex.IsMatch(input, regex);

}

6. S d ng bi u th c chính quy đã đ S d ng bi u th c chính quy đã đ ử ụ ử ụ ể ể ứ ứ ượ ượ c biên d ch c biên d ch ị ị

Bạn cần giảm thiểu các tác động lên hiệu năng của ứng dụng khi các biểu thức

chính quy phức tạp được sử dụng thường xuyên.

Trang 3

Khi khởi tạo đối tượng System.Text.RegularExpressions.Regex , hãy truyền thêm

tùy chọn Compiled thuộc kiểu liệt kê System.Text.RegularExpressions RegexOptions để biên dịch biểu thức chính quy thành Microsoft Intermediate

Language (MSIL).

Theo mặc định, khi bạn tạo đối tượng Regex, mẫu biểu thức chính quy do bạn xác định trong

phương thức khởi dựng được biên dịch thành một dạng trung gian (không phải MSIL) Mỗi

lần bạn sử dụng đối tượng Regex, bộ thực thi phiên dịch dạng trung gian này và áp dụng nó để kiểm tra chuỗi Với các biểu thức chính quy phức tạp được sử dụng thường xuyên, việc phiên dịch lặp lặp đi lại có thể gây tác động xấu lên hiệu năng của ứng dụng

Khi tùy chọn RegexOptions.Compiled được chỉ định, bộ thực thi sẽ biên dịch biểu thức chính

quy thành MSIL MSIL này được gọi là mã just-in-time (JIT), được biên dịch thành mã máy

nguyên sinh trong lần thực thi đầu tiên, giống như mã assembly thông thường Biểu thức chính quy được biên dịch cũng được sử dụng giống như đối tượng Regex, việc biên dịch chỉ giúp thực thi nhanh hơn

Tuy nhiên, việc biên dịch biểu thức chính quy cũng có vài nhược điểm Trước tiên, trình biên

dịch JIT phải làm việc nhiều hơn, dẫn đến chậm quá trình biên dịch, đặc biệt khi tạo biểu thức

chính quy được biên dịch khi ứng dụng khởi động Thứ hai, biểu thức chính quy được biên dịch vẫn tồn tại trong bộ nhớ khi không còn được sử dụng nữa, nó không bị bộ thu gom rác

(Garbage Collector) xóa đi như các biểu thức chính quy thông thường Vùng nhớ bị chiếm chỉ

được giải phóng khi chương trình kết thúc, hoặc khi bạn giải phóng miền ứng dụng

Dòng mã sau minh họa cách tạo một đối tượng Regex được biên dịch thành MSIL:

Regex reg = new Regex(@"[\w-]+@([\w-]+\.)+[\w-]+",

RegexOptions.Compiled);

Ngoài ra, phương thức tĩnh Regex.CompileToAssembly cho phép bạn tạo một biểu thức chính quy được biên dịch và ghi nó vào một assembly khác Nghĩa là bạn có thể tạo một assembly chứa các biểu thức chính quy để sử dụng cho nhiều ứng dụng sau này Để biên dịch một biểu thức chính quy và lưu nó vào một assembly, thực hiện các bước sau:

1 Tạo một mảng System.Text.RegularExpressions.RegexCompilationInfo đủ lớn để chứa các đối tượng RegexCompilationInfo, mỗi đối tượng ứng với một biểu thức chính quy cần được biên dịch

2 Tạo một đối tượng RegexCompilationInfo cho mỗi biểu thức chính quy và truyền đối số cho phương thức khởi dựng để xác định các thuộc tính của biểu thức chính quy này Các thuộc tính thông dụng là:

• IsPublic giá trị bool xác định lớp biểu thức chính quy được tạo ra có tầm vực

là công khai hay không

• Name một String xác định tên của lớp

• Namespace một String xác định không gian tên của lớp

• Pattern một String xác định mẫu mà biểu thức chính quy sẽ so trùng (xem chi tiết ở mục 2.5)

• Options một giá trị thuộc kiểu liệt kê System.Text.RegularExpressions RegexOptions xác định các tùy chọn cho biểu thức chính quy

Trang 4

3 Tạo một đối tượng System.Reflection.AssemblyName để xác định tên của assembly mà phương thức Regex.CompileToAssembly sẽ tạo ra

4 Gọi phương thức Regex.CompileToAssembly, truyền các đối số là mảng

RegexCompilationInfo và đối tượng AssemblyName

Quá trình trên tạo ra một assembly chứa các khai báo lớp cho từng biểu thức chính quy được biên dịch, mỗi lớp dẫn xuất từ Regex Để sử dụng một biểu thức chính quy đã được biên dịch trong assembly, bạn cần tạo đối tượng biểu thức chính quy này và gọi các phương thức của nó giống như khi tạo nó với phương thức khởi dựng Regex bình thường Bạn nhớ thêm tham chiếu tới assembly khi sử dụng các lớp biểu thức chính quy nằm trong nó

Đoạn mã sau minh họa cách tạo một assembly có tên là MyRegex.dll, chứa hai biểu thức chính

quy có tên là PinRegex và CreditCardRegex:

using System.Text.RegularExpressions;

using System.Reflection;

public class CompiledRegexExample {

public static void Main() {

// Tạo mảng chứa các đối tượng RegexCompilationInfo.

RegexCompilationInfo[] regexInfo = new RegexCompilationInfo[2];

// Tạo đối tượng RegexCompilationInfo cho PinRegex.

regexInfo[0] = new RegexCompilationInfo(@"^\d{4}$",

RegexOptions.Compiled, "PinRegex", "", true);

// Tạo đối tượng RegexCompilationInfo cho CreditCardRegex.

regexInfo[1] = new RegexCompilationInfo(

@"^\d{4}-?\d{4}-?\d{4}-?\d{4}$",

RegexOptions.Compiled, "CreditCardRegex", "", true);

// Tạo đối tượng AssemblyName để định nghĩa assembly.

AssemblyName assembly = new AssemblyName();

assembly.Name = "MyRegEx";

// Tạo các biểu thức chính quy được biên dịch.

Regex.CompileToAssembly(regexInfo, assembly);

Trang 5

7. T o ngày và gi t chu i T o ngày và gi t chu i ạ ạ ờ ừ ờ ừ ỗ ỗ

Bạn cần tạo một thể hiện System.DateTime mô tả giờ, ngày được chỉ định trong

một chuỗi.

Sử dụng phương thức Parse hoặc ParseExact của lớp DateTime

Có nhiều cách mô tả ngày, giờ; ví dụ 1st June 2004, 1/6/2004, 6/1/2004, 1-Jun-2004 cùng chỉ một ngày; 16:43 và 4:43 PM cùng chỉ một giờ Lớp DateTime cung cấp phương thức tĩnh

Parse rất linh hoạt, cho phép tạo thể hiện DateTime từ nhiều cách mô tả khác nhau trong chuỗi

Phương thức Parse rất mạnh trong việc tạo đối tượng DateTime từ một chuỗi cho trước Nó có thể xử lý một chuỗi chỉ chứa một phần thông tin hay chứa thông tin sai, và thay thế các giá trị

thiếu bằng các giá trị mặc định Ngày mặc định là ngày hiện tại, giờ mặc định là 12:00:00

AM Nếu sau mọi cố gắng, Parse không thể tạo đối tượng DateTime, nó sẽ ném ngoại lệ

System.FormatException Ví dụ sau minh họa tính linh hoạt của Parse:

// 01/09/2004 12:00:00 AM

DateTime dt1 = DateTime.Parse("Sep 2004");

// 05/09/2004 02:15:33 PM

DateTime dt2 = DateTime.Parse("Sun 5 September 2004 14:15:33");

// 05/09/2004 12:00:00 AM

DateTime dt3 = DateTime.Parse("5,9,04");

// 05/09/2004 02:15:33 PM

DateTime dt4 = DateTime.Parse("5/9/2004 14:15:33");

// 07/10/2004 02:15:00 PM (giả sử ngày hiện tại là 07/10/2004)

DateTime dt5 = DateTime.Parse("2:15 PM");

Phương thức Parse linh hoạt và có thể tự sửa lỗi Tuy nhiên, mức độ linh hoạt này không cần thiết trong trường hợp bạn muốn bảo đảm các chuỗi phải theo một định dạng nhất định Khi

đó, sử dụng phương thức ParseExact thay cho Parse Dạng đơn giản nhất của ParseExact

nhận ba đối số: chuỗi chứa ngày giờ, chuỗi định dạng xác định cấu trúc mà chuỗi chứa ngày giờ phải tuân theo, và một tham chiếu IFormatProvider cung cấp thông tin đặc thù về bản địa Nếu IFormatProvider là null, thông tin về bản địa của tiểu trình (thread) hiện hành sẽ được

sử dụng

Nếu ngày giờ trong chuỗi đang xét không đúng với định dạng quy định, ParseExact sẽ ném ngoại lệ System.FormatException Chuỗi định dạng được sử dụng tương tự như khi bạn chỉ

Trang 6

định chuỗi đại diện cho một đối tượng DateTime Điều này có nghĩa là bạn có thể sử dụng cả định dạng chuẩn lẫn định dạng tùy biến Tham khảo phần tài liệu cho lớp

System.Globalization.DateTimeFormatInfo trong tài liệu NET Framework SDK để có thông

tin đầy đủ về tất cả các kiểu định dạng

// Chỉ phân tích các chuỗi chứa LongTimePattern.

DateTime dt6 = DateTime.ParseExact("2:13:30 PM",

"h:mm:ss tt", null);

// Chỉ phân tích các chuỗi chứa RFC1123Pattern.

DateTime dt7 = DateTime.ParseExact(

"Sun, 05 Sep 2004 14:13:30 GMT",

"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", null);

// Chỉ phân tích các chuỗi chứa MonthDayPattern.

DateTime dt8 = DateTime.ParseExact("September 03",

"MMMM dd", null);

8. C ng, tr , so sánh ngày gi C ng, tr , so sánh ngày gi ộ ộ ừ ừ ờ ờ

Bạn cần thực hiện các phép tính số học cơ bản hay phép so sánh trên ngày, giờ.

Sử dụng các cấu trúc DateTime và TimeSpan (hỗ trợ các toán tử số học và so sánh).

Một đối tượng DateTime mô tả một thời điểm xác định (chẳng hạn 4:15 AM, ngày 21 tháng 04 năm 1980), trong khi đối tượng TimeSpan mô tả một khoảng thời gian (chẳng hạn 2 giờ, 35 phút) Bạn có thể cộng, trừ, so sánh các đối tượng TimeSpan và DateTime

Thực chất, cả DateTime và TimeSpan đều sử dụng tick để mô tả thời gian—1 tick bằng 100 nano-giây (một nano-giây bằng một phần tỷ (10-9) giây) TimeSpan lưu khoảng thời gian của

nó là số tick bằng khoảng thời gian đó, DateTime lưu số tick đã trôi qua kể từ 12:00:00 khuya

ngày 1 tháng 1 năm 0001 sau công nguyên Cách tiếp cận này và việc sử dụng toán tử nạp chồng giúp DateTime và TimeSpan dễ dàng hỗ trợ các phép tính số học và so sánh Bảng 2.4 tóm tắt các toán tử mà hai cấu trúc này hỗ trợ

Bảng 2.4 Các toán tử được cung cấp bởi DateTime và TimeSpan

Gán (=)

Vì TimeSpan là một cấu trúc nên phép gán trả về một bản sao, không phải một tham chiếu

Vì DateTime là một cấu trúc nên phép gán trả về một bản sao, không phải một tham chiếu

Trang 7

Cộng (+) Cộng hai đối tượng TimeSpan Cộng một TimeSpan vào một

DateTime Trừ (-) Trừ hai đối tượng TimeSpan Trừ một DateTime cho một

DateTime hoặc một TimeSpan Bằng (==) So sánh hai đối tượng TimeSpan và

trả về true nếu bằng nhau

So sánh hai đối tượng DateTime và trả về true nếu bằng nhau

Không bằng

(!=)

So sánh hai đối tượng TimeSpan và trả về true nếu không bằng nhau

So sánh hai đối tượng DateTime và trả về true nếu không bằng nhau Lớn hơn (>)

Xác định một đối tượng TimeSpan

có lớn hơn một đối tượng

TimeSpan khác hay không

Xác định một đối tượng DateTime

có lớn hơn một đối tượng DateTime

khác hay không

Lớn hoặc bằng

(>=)

Xác định một đối tượng TimeSpan

có lớn hơn hoặc bằng một đối tượng TimeSpan khác hay không

Xác định một đối tượng DateTime

có lớn hơn hoặc bằng một đối tượng DateTime khác hay không Nhỏ hơn (<)

Xác định một đối tượng TimeSpan

có nhỏ hơn một đối tượng

TimeSpan khác hay không

Xác định một đối tượng DateTime

có nhỏ hơn một đối tượng DateTime

khác hay không

Nhỏ hoặc bằng

(<=)

Xác định một đối tượng TimeSpan

có nhỏ hơn hoặc bằng một đối tượng TimeSpan khác hay không

Xác định một đối tượng DateTime

có nhỏ hơn hoặc bằng một đối tượng DateTime khác hay không

Âm (-) Trả về một giá trị đảo dấu của một

Dương (+) Trả về chính TimeSpan Không hỗ trợ

Cấu trúc DateTime cũng hiện thực các phương thức AddTicks, AddMilliseconds, AddSeconds,

AddMinutes, AddHours, AddDays, AddMonths, và AddYears Mỗi phương thức này cho phép bạn cộng (hoặc trừ bằng các giá trị âm) phần tử thời gian thích hợp với đối tượng DateTime Các phương thức này và các toán tử được liệt kê trong bảng 2.4 không làm thay đổi DateTime gốc

—thay vào đó chúng sẽ tạo một đối tượng mới với giá trị đã được thay đổi Đoạn mã dưới đây trình bày cách sử dụng các toán tử để thao tác các cấu trúc DateTime và TimeSpan:

// Tạo một TimeSpan mô tả 2.5 ngày.

TimeSpan timespan1 = new TimeSpan(2,12,0,0);

// Tạo một TimeSpan mô tả 4.5 ngày.

TimeSpan timespan2 = new TimeSpan(4,12,0,0);

// Tạo một TimeSpan mô tả 1 tuần.

TimeSpan oneWeek = timespan1 + timespan2;

// Tạo một DateTime với ngày giờ hiện tại.

DateTime now = DateTime.Now;

Trang 8

// Tạo một DateTime mô tả 1 tuần trước đây.

DateTime past = now - oneWeek;

// Tạo một DateTime mô tả 1 tuần trong tương lai.

DateTime future = now + oneWeek;

9. S p x p m t m ng ho c m t ArrayList S p x p m t m ng ho c m t ArrayList ắ ế ộ ả ắ ế ộ ả ặ ộ ặ ộ

Bạn cần sắp xếp các phần tử trong một mảng hoặc một ArrayList

Sử dụng phương thức ArrayList.Sort để sắp xếp ArrayList và phương thức tĩnh

Array.Sort để sắp xếp mảng.

Dạng đơn giản nhất của Sort là sắp xếp các đối tượng nằm trong một mảng hoặc ArrayList

khi các đối tượng này có hiện thực giao diện System.Icomparable và có kiểu giống nhau—tất

cả các kiểu dữ liệu cơ bản đều hiện thực Icomparable Đoạn mã dưới đây minh họa cách sử dụng phương thức Sort:

// Tạo một mảng mới và thêm phần tử vào.

int[] array = {4, 2, 9, 3};

// Sắp xếp mảng.

Array.Sort(array);

// Hiển thị nội dung của mảng đã được sắp xếp.

foreach (int i in array) { Console.WriteLine(i);}

// Tạo một ArrayList mới và thêm phần tử vào.

ArrayList list = new ArrayList(4);

list.Add("Phong");

list.Add("Phuong");

list.Add("Khoa");

list.Add("Tam");

// Sắp xếp ArrayList.

list.Sort();

// Hiển thị nội dung của ArrayList đã được sắp xếp.

foreach (string s in list) { Console.WriteLine(s);}

Trang 9

một đối tượng hiện thực giao diện System.Collections.IComparer Hiện thực của IComparer

phải có khả năng so sánh các đối tượng nằm trong mảng hoặc ArrayList (xem mục 16.3 để biết cách hiện thực IComparable và IComparer)

10. Chép m t t p h p vào m t m ng Chép m t t p h p vào m t m ng ộ ậ ợ ộ ậ ợ ộ ả ộ ả

Bạn cần chép nội dung của một tập hợp vào một mảng.

Sử dụng phương thức ICollection.CopyTo (được hiện thực bởi tất cả các lớp tập

hợp), hoặc sử dụng phương thức ToArray (được hiện thực bởi các tập hợp

ArrayList , Stack , Queue ).

Các phương thức ICollection.CopyTo và ToArray có cùng chức năng, chúng chép các phần tử trong một tập hợp vào một mảng Sự khác biệt nằm ở chỗ CopyTo chép vào một mảng đã có, trong khi ToArray tạo ra một mảng mới rồi chép vào đó

CopyTo nhận hai đối số: một mảng và một chỉ số Mảng này là đích của quá trình sao chép và phải có kiểu tương thích với các phần tử của tập hợp Nếu kiểu không tương thích hay không

có sự chuyển đổi ngầm từ kiểu phần tử của tập hợp sang kiểu phần tử của mảng thì ngoại lệ

System.InvalidCastException sẽ bị ném Chỉ số là một vị trí trong mảng mà bắt đầu từ đó các phần tử của tập hợp sẽ được chép vào Nếu chỉ số này lớn hơn hoặc bằng chiều dài của mảng, hoặc số phần tử của tập hợp vượt quá sức chứa của mảng thì ngoại lệ

System.ArgumentException sẽ bị ném Đoạn mã sau minh họa cách sử dụng CopyTo để chép nội dung của một ArrayList vào một mảng:

// Tạo một ArrayList mới và thêm phần tử vào.

ArrayList list = new ArrayList(5);

list.Add("Phuong");

list.Add("Phong");

list.Add("Nam");

list.Add("Tam");

list.Add("Nhan");

// Tạo một string[] và sử dụng ICollection.CopyTo

// để chép nội dung của ArrayList.

string[] array1 = new string[5];

list.CopyTo(array1,0);

Các lớp ArrayList, Stack, và Queue cũng hiện thực phương thức ToArray, phương thức này tự động tạo một mảng với kích thước đủ để chứa các phần tử của của tập hợp Nếu bạn không truyền đối số cho ToArray, nó sẽ trả về một object[] bất chấp kiểu của các đối tượng trong tập hợp Tuy nhiên, bạn có thể truyền một đối tượng System.Type để chỉ định kiểu của mảng (Bạn phải ép mảng kiểu mạnh về đúng kiểu) Ví dụ sau minh họa cách sử dụng ToArray cho

ArrayList ở trên:

Trang 10

// Sử dụng ArrayList.ToArray để tạo một object[]

// từ nội dung của tập hợp.

object[] array2 = list.ToArray();

// Sử dụng ArrayList.ToArray để tạo một string[] kiểu mạnh

// từ nội dung của tập hợp.

string[] array3 =

(string[])list.ToArray(System.Type.GetType("System.String"));

11. T o m t t p h p ki u m nh T o m t t p h p ki u m nh ạ ộ ậ ợ ạ ộ ậ ợ ể ạ ể ạ

Bạn cần tạo một tập hợp chỉ chứa các phần tử thuộc một kiểu nhất định.

Tạo một lớp dẫn xuất từ lớp System.Collections.CollectionBase hay

System.Collections.DictionaryBase , và hiện thực các phương thức

an-toàn-về-kiểu-dữ-liệu (type-safe) để thao tác trên tập hợp.

Các lớp CollectionBase và DictionaryBase có thể đóng vai trò các lớp cơ sở để dẫn xuất ra các lớp tập hợp an-toàn-kiểu mà không phải hiện thực lại các giao diện chuẩn: IDictionary,

IList, ICollection, và IEnumerable

• CollectionBase dùng cho các tập hợp dựa-trên-Ilist (như ArrayList) Thực chất,

CollectionBase duy trì tập hợp bằng một đối tượng ArrayList chuẩn, có thể được truy xuất thông qua thuộc tính bảo vệ List

• DictionaryBase dùng cho các tập hợp dựa-trên-IDictionary (như Hashtable) Thực chất, DictionaryBase duy trì tập hợp bằng một đối tượng Hashtable chuẩn, có thể được truy xuất thông qua thuộc tính bảo vệ Dictionary

Đoạn mã sau hiện thực một tập hợp tên mạnh (dựa trên lớp CollectionBase) để thể hiện một danh sách các đối tượng System.Reflection.AssemblyName

using System.Reflection;

using System.Collections;

public class AssemblyNameList : CollectionBase {

public int Add(AssemblyName value) {

return this.List.Add(value);

}

public void Remove(AssemblyName value) {

Ngày đăng: 08/07/2014, 17:20

HÌNH ẢNH LIÊN QUAN

Bảng 2.3 Một số biểu thức chính quy thông dụng - Các giải pháp lập trình CSharp- P8 pot
Bảng 2.3 Một số biểu thức chính quy thông dụng (Trang 1)
Bảng 2.4 Các toán tử được cung cấp bởi DateTime và TimeSpan - Các giải pháp lập trình CSharp- P8 pot
Bảng 2.4 Các toán tử được cung cấp bởi DateTime và TimeSpan (Trang 6)

TỪ KHÓA LIÊN QUAN