Ví dụ về sử dụng TryAdd trong C#
using System;
using System.Collections.Concurrent; // BẮT BUỘC có dòng này ở đầu file để dùng TryAdd trong .NET 4.8
// ... bên trong hàm xử lý:
// Lưu ý: DSNV1 phải được khai báo là: ConcurrentDictionary<string, NhanVien> DSNV1 = new ConcurrentDictionary<string, NhanVien>();
while (true){
Console.WriteLine("nhập 0 để đến thoát nhập, nhập B cho nhân viên biên chế, H cho nhân viên hợp đồng ");
String Option = Console.ReadLine().ToUpper();
if (Option == "0") break;
else if (Option == "B") NV = new NVBC();
else if (Option == "H") NV = new NVHD();
else {
Console.WriteLine("Chỉ nhập 0 or B or H");
continue; // Dùng continue để quay lại đầu vòng lặp nếu nhập sai Option
}
if (NV is NVBC || NV is NVHD) {
while (true) {
NV.Nhap();
// 1. Thực hiện nhập thông tin nhân viên
// 2. Dùng TryAdd để kiểm tra và thêm vào Dictionary
// Nếu chưa có mã này: TryAdd thêm vào, trả về true -> chạy vào if -> break
if (DSNV1.TryAdd(NV.MaNhanVien, NV)) {
Console.WriteLine("Thêm nhân viên thành công!");
break; // Thoát vòng lặp nhập thông tin
} else {
// Nếu mã đã tồn tại: TryAdd trả về false -> chạy vào else -> bắt nhập lại
Console.WriteLine("Lỗi: Trùng mã nhân viên! Vui lòng nhập lại.");
}
}
}
}
Những điểm cải tiến trong đoạn code mới:
- Loại bỏ hoàn toàn try-catch: Luồng chương trình trở nên minh bạch, tốc độ xử lý nhanh hơn do không bị tốn tài nguyên đóng gói exception.
Xử lý đúng Option nhập sai: Thêm continue ở nhánh else chọn Option để chương trình không nhảy xuống khối kiểm tra if (NV is NVBC...) khi người dùng nhập linh tinh.
Tăng trải nghiệm người dùng: Thông báo lỗi giờ đây chỉ rõ nguyên nhân là "Trùng mã nhân viên" (vì việc ép kiểu dữ liệu sai định dạng số/ngày tháng nên được TryParse kiểm tra ngay bên trong phương thức NV.Nhap()).