Blog chia sẽ kinh nghiệm lập trình và Technical VN. Nơi mà các bạn có thể học tập và tham khảo về những công nghệ mới nhất hiện nay về .NET
Thứ Bảy, 20 tháng 12, 2014
On 10:35 by Tuan Pham in .NET, C#, Chuyên Đề Lập Trình .NET, duyệt mảng, index, indexer, Kinh Nghiệm Lập Trình, kỹ thuật, Lập trình No comments
Ở bài này tôi sẽ hướng dẫn các bạn một kỹ thuật để duyệt một Object theo kiểu duyệt Aray hay List. Chúng ta đã quá quen với việc duyệt một List theo kiểu thế này ' var result = myList[0].Value; ' vậy có bao giờ các bạn đặc vấn đề rằng sẽ duyệt các phần tử được chứa trong một đối tượng của mình theo kiểu trên, hôm nay chúng ta sẽ tìm hiểu.
Vấn đề tôi đặc ra là tôi có một Class mô tả một lớp học ClassXYZ, trong lớp học này tôi sẽ có một kiểu dữ liệu là List để giữ danh sách thông tin các học sinh (Students) trong lớp này. Vậy để lấy thông tin một học sinh nào đó trong lớp trên tôi sẽ phải thông qua một public property là Studentlist của đối tượng ClassXYZ, tôi tự hỏi có cách nào tôi không cần thông qua property này không. Tôi sẽ mô tả điều này theo hai cách nghĩ là truyền thống và kỹ thuật indexer như sau.
Cách làm bình thường:
[code language="csharp"]
class Program
{
static void Main(string[] args)
{
var classXYZ = new ClassXYZ();
classXYZ.AddStudent(new Student(){Name = "Nguyen A",Stt = 0});
classXYZ.AddStudent(new Student() { Name = "Nguyen B",Stt = 1 });
Console.WriteLine("Student #{0} Name = {1}", 0, classXYZ.StudenList[0].Name);
Console.WriteLine("Student #{0} Name = {1}", 1, classXYZ.StudenList[1].Name);
Console.ReadKey();
}
}
//----------------------------
public class ClassXYZ
{
public List<Student> StudenList
{
private set;
get;
}
public ClassXYZ()
{
StudenList = new List<Student>();
}
public void AddStudent(Student student)
{
StudenList.Add(student);
}
}
//----------------------------
public class Student
{
public string Name { set; get; }
public int Index { set; get; }
}
[/code]
Kỹ thuật indexer
ở cách làm này tôi sẽ thêm vào ClassXYZ một property mà tên property này là từ khóa this, các bạn sẽ thấy sự thay đổi cách dùng ở hàm Main.
[code language="csharp"]
// Before
Console.WriteLine("Student #{0} Name = {1}", 0, classXYZ.StudenList[0].Name);
Console.WriteLine("Student #{0} Name = {1}", 1, classXYZ.StudenList[1].Name);
// After
Console.WriteLine("Student #{0} Name = {1}", 0, classXYZ[0].Name);
Console.WriteLine("Student #{0} Name = {1}", 1, classXYZ[1].Name);
[/code]
[code language="csharp"]
class Program
{
static void Main(string[] args)
{
var classXYZ = new ClassXYZ();
classXYZ.AddStudent(new Student(){Name = "Nguyen A",Stt = 0});
classXYZ.AddStudent(new Student() { Name = "Nguyen B",Stt = 1 });
Console.WriteLine("Student #{0} Name = {1}", 0, classXYZ[0].Name);
Console.WriteLine("Student #{0} Name = {1}", 1, classXYZ[1].Name);
Console.ReadKey();
}
}
//----------------------------
public class ClassXYZ
{
public List<Student> StudenList
{
private set;
get;
}
// Add it
public Student this[int index]
{
get
{
return StudenList[index];
}
set
{
StudenList[index] = value;
}
}
public ClassXYZ()
{
StudenList = new List<Student>();
}
public void AddStudent(Student student)
{
StudenList.Add(student);
}
}
[/code]
Hai cách trên đều cho cùng một kết quả:
[caption id="attachment_173" align="aligncenter" width="300"]
Phạm Tuân[/caption]Chúc các bạn thành công!
Phạm Tuân
Đăng ký:
Đăng Nhận xét (Atom)
Search
Popular Posts
-
Phong cách thiết kế Material Design nhắm đến những đường nét đơn giản, sử dụng nhiều mảng màu đậm nổi bật, các đối tượng đồ họa trong giao ...
-
Hôm nay tôi sẽ giới thiệu với các bạn một Framework đến từ Microsoft - framework này không quá lớn nhưng là khá mạnh khi các bạn làm việc vớ...
-
WPF vượt trội hơn Winform về khoản Drawing , trong đó đặc biệt WPF hỗ trợ đồ họa rất tốt vì nó tương tác trực tiếp đến GPU. Hôm nay chúng t...
-
Hôm nay chúng ta sẽ tìm hiểu cách tạo ra các menu chuột phải trên ứng dụng WPF của mình. Ở bài này chúng ta xoay quanh việc tìm hiểu cách tạ...
-
Để dễ hiểu, các bạn hãy hình dung rằng: cùng một tập tin thực thi *.EXE nhưng bạn DoubleClick 10 lần cách quãng vào nó thì chuyện gì sẽ sảy ...
-
Trong bài viết trước tôi có giới thiệu về Extension Methods trong nguôn ngữ lập trình C#; hôm nay tôi sẽ nói về một vấn đề có ý nghĩa tương...
-
Hôm nay chúng ta sẽ thử đo xem thời gian query Data của "Foreach vs LinQ vs LinQasParallel" như thế nào. Tôi tạo một tool nhỏ để l...
-
Data Binding là kĩ thuật dùng để tạo gắn kết giữa phần giao diện ( UI ) và dữ liệu thông qua phần business logic hoặc giữa các đối tượng UI...
-
LOG4NET là một thư viện mã nguồn mở cho phép chúng ta tạo ra một hoặc nhiều tập tin log, kiểu log cũng như nội dung log một cách linh hoạt v...
-
Sau hai bài giới thiệu về Caliburn.Micro framework, hôm nay chúng ta sẽ cùng bắt tay vào làm một dự án nhỏ - HelloWorld. Step 1: Add referen...
Recent Posts
Blog Archive
-
▼
2014
(18)
-
▼
tháng 12
(18)
- WPF - Các Vấn Đề Về Multi-Thread Trong WPF (Đa Luồng)
- Modern UI For WPF Thiết Kế Giao diện Modern Win8 V...
- WPF - Thiết Kế Giao Diện METRO Win8 Với Thư Viện M...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- WPF - Validation ValidationRule và Vấn Đề Về Thông...
- Parallel Class Trong C# và Vấn Đề Xử lý Song Song
- Tìm Hiểu Về Delegate Trong C# và Cách Truyền Dữ Li...
- Extension Methods - Thêm Một Phương Thức Ngoài Vào...
- Indexer trong C# - Kỹ Thuật Duyệt Qua Phần Tử Tron...
- SourceCode - DataBinding và ValueConverter
- WPF - DataBinding và chuyển đổi kiểu dữ liệu IValu...
- SourceCode - DataBinding và UpdateSourceTrigger
- WPF - DataBinding và cở chế tự động update dữ liệu
- SourceCode - DataBinding
- WPF – Cơ Bản về Data Binding
- WPF - Bộ Công Cụ Đắc Lực Cho Thiết Kế Expression S...
- WPF - Các Thành Phần Của WPF
- WPF - Tổng quan về Windows Presentation Foundation
-
▼
tháng 12
(18)
0 nhận xét:
Đăng nhận xét