Trong C#, danh sách là một cấu trúc dữ liệu chung có thể chứa bất kỳ kiểu nào. Sử dụng new
toán tử và khai báo kiểu phần tử trong dấu ngoặc nhọn < >
.
Trong mã ví dụ, names
là một danh sách chứa string
các giá trị. someObjects
là một danh sách chứa các thể hiện Object
.
List<string> names = new List<string>();
List<Object> someObjects = new List<Object>();
Giá trị có thể được cung cấp cho một List
khi nó được xây dựng trong một quá trình gọi là khởi tạo đối tượng .
Thay vì dấu ngoặc đơn, hãy sử dụng dấu ngoặc nhọn sau kiểu của danh sách.
Lưu ý rằng điều này CHỈ có thể được sử dụng tại thời điểm xây dựng.
List<string> cities = new List<string> { "Los Angeles", "New York City", "Dubai" };
Một số bộ sưu tập, như danh sách và từ điển, có thể được liên kết với nhiều loại khác nhau. Thay vì xác định một lớp duy nhất cho mỗi kiểu có thể, chúng ta định nghĩa chúng bằng một kiểu chung T
, ví dụ List<T>
.
Các tập hợp này được gọi là các loại tập hợp chung . Chúng có sẵn trong System.Collections.Generic
không gian tên.
Loại chung T
thường sẽ hiển thị trong tài liệu. Khi sử dụng tập hợp chung trong mã của bạn, kiểu thực tế được chỉ định khi tập hợp được khai báo hoặc khởi tạo.
using System.Collections.Generic;
List<string> names = new List<string>();
List<Object> objs = new List<Object>();
Dictionary<string,int> scores = new Dictionary<string, int>();
Không giống như mảng C#, danh sách C# không có số phần tử giới hạn. Bạn có thể thêm bao nhiêu mục tùy thích.
// Initialize array with length 2
string[] citiesArray = new string[2];
citiesArray[0] = "Los Angeles";
citiesArray[1] = "New York City";
citiesArray[2] = "Dubai"; // Error!
// Initialize list; no length needed
List<string> citiesList = new List<string>();
citiesList.Add("Los Angeles");
citiesList.Add("New York City");
citiesList.Add("Dubai");
Số phần tử trong danh sách được lưu trữ trong thuộc tính Count.
Trong mã ví dụ, các Count
citiesList
thay đổi khi chúng tôi thêm và xóa các giá trị.
List<string> citiesList = new List<string>();
citiesList.Add("Los Angeles");
Console.WriteLine(citiesList.Count);
// Output: 1
citiesList.Add("New York City");
Console.WriteLine(citiesList.Count);
// Output: 2
citiesList.Remove("Los Angeles");
Console.WriteLine(citiesList.Count);
// Output: 1
Các phần tử của danh sách có thể được loại bỏ bằng phương thức Remove() này. Phương thức trả về true
nếu mục được xóa thành công; nếu không false
,.
Trong mã ví dụ, cố gắng xóa "Cairo"
trả về false
vì phần tử đó không có trong citiesList
.
List<string> citiesList = new List<string>();
citiesList.Add("Los Angeles");
citiesList.Add("New York City");
citiesList.Add("Dubai");
result1 = citiesList.Remove("New York City");
// result1 is true
result2 = citiesList.Remove("Cairo");
// result2 is false
Tất cả các phần tử của danh sách có thể được loại bỏ bằng phương thức Clear() này. Nó không trả lại gì.
Trong mã ví dụ, danh sách được khởi tạo với ba mục. Sau khi gọi Clear()
, không có mục nào trong danh sách.
List<string> citiesList = new List<string> { "Delhi", "Los Angeles", "Kiev" };
citiesList.Clear();
Console.WriteLine(citiesList.Count);
// Output: 0
Trong C#, phương thức list Contains()
trả về true
nếu đối số của nó tồn tại trong danh sách; nếu không false
,.
Trong mã ví dụ, lệnh gọi đầu tiên Contains()
trả về true
vì "Thành phố New York" có trong danh sách. Cuộc gọi thứ hai trở lại false
vì “Cairo” không có trong danh sách.
List<string> citiesList = new List<string> { "Los Angeles", "New York City", "Dubai" };
result1 = citiesList.Contains("New York City");
// result1 is true
result2 = citiesList.Contains("Cairo");
// result2 is false
Không giống như các phần tử trong mảng C#, nhiều phần tử của danh sách C# có thể được truy cập, thêm hoặc xóa đồng thời. Một nhóm gồm nhiều phần tử tuần tự trong danh sách được gọi là một dải ô.
Một số phương pháp liên quan đến phạm vi phổ biến là:
AddRange()
InsertRange()
RemoveRange()
string[] african = new string[] { "Cairo", "Johannesburg" };
string[] asian = new string[] { "Delhi", "Seoul" };
List<string> citiesList = new List<string>();
// Add two cities to the list
citiesList.AddRange(african);
// List: "Cairo", "Johannesburg"
// Add two cities to the front of the list
citiesList.InsertRange(0, asian);
// List: "Delhi", "Seoul", "Cairo", "Johannesburg"
// Remove the second and third cities from the list
citiesList.RemoveRange(1, 2);
// List: "Delhi", "Johannesburg"
LINQ là một tập hợp các tính năng khung và ngôn ngữ để viết các truy vấn trên các loại tập hợp. Nó rất hữu ích để chọn, truy cập và chuyển đổi dữ liệu trong một tập dữ liệu.
Các tính năng LINQ có thể được sử dụng trong chương trình C# bằng cách using namespace System.Linq
.
using System.Linq;
Vì loại kết quả của truy vấn LINQ được thực thi không phải lúc nào cũng được biết đến, nên thông thường người ta lưu trữ kết quả trong một biến được định kiểu ngầm bằng cách sử dụng từ khóa var
.
var custQuery = from cust in customers
where cust.City == "Phoenix"
select new { cust.Name, cust.Phone };
Trong C#, các truy vấn LINQ có thể được viết bằng cú pháp phương thức hoặc cú pháp truy vấn .
Cú pháp phương thức giống với hầu hết các lệnh gọi phương thức C# khác, trong khi cú pháp truy vấn giống với SQL.
// Method syntax
var custQuery2 = customers.Where(cust => cust.City == "London");
// Query syntax
var custQuery =
from cust in customers
where cust.City == "London"
select cust;
Trong các truy vấn LINQ, toán tử Where được sử dụng để chọn các phần tử nhất định từ một chuỗi.
List<Customer> customers = new List<Customer>
{
new Customer("Bartleby", "London"),
new Customer("Benjamin", "Philadelphia"),
new Customer("Michelle", "Busan" )
};
// Query syntax
var custQuery =
from cust in customers
where cust.City == "London"
select cust;
// Method syntax
var custQuery2 = customers.Where(cust => cust.City == "London");
// Result: Customer("Bartleby", "London")
Trong các truy vấn LINQ, toán tử from khai báo một biến phạm vi được sử dụng để duyệt qua chuỗi. Nó chỉ được sử dụng trong cú pháp truy vấn.
Trong mã ví dụ, n
đại diện cho mỗi phần tử trong names
. Truy vấn trả về chỉ chứa những phần tử n.Contains("a")
đúng.
string[] names = { "Hansel", "Gretel", "Helga", "Gus" };
var query =
from n in names
where n.Contains("a")
select n;
// Result: Hansel, Helga
Trong các truy vấn LINQ, toán tử Select xác định những gì được trả về cho mỗi phần tử trong truy vấn kết quả. Nó có thể được sử dụng trong cả phương thức và cú pháp truy vấn.
string[] trees = { "Elm", "Banyon", "Rubber" };
// Query syntax
var treeQuery =
from t in trees
select t.ToUpper();
// Method syntax
var treeQuery2 = names.Select(t => t.ToUpper());
// Result: ELM, BANYON, RUBBER
Bạn có thể sử dụng một vòng lặp foreach để lặp lại kết quả của một truy vấn LINQ đã thực thi.
Trong mã ví dụ, query
là kết quả của một truy vấn LINQ và nó có thể được lặp lại khi sử dụng foreach
. name
đại diện cho mỗi phần tử trong names
.
string[] names = { "Hansel", "Gretel", "Helga", "Gus" };
var query = names.Where(n => n.Contains("a"));
foreach (var name in query)
{
Console.WriteLine(name);
}
Kết quả của một truy vấn LINQ được thực thi có một phương thức Count()
, phương thức này trả về số phần tử mà nó chứa.
Trong mã ví dụ, Count()
trả về 2
vì kết quả query
chứa 2 phần tử chứa “a”.
string[] names = { "Hansel", "Gretel", "Helga", "Gus" };
var query = names.Where(x => x.Contains("a"));
Console.WriteLine(query.Count());
// Output: 2
Đăng nhận xét