Trong mã của tôi có một số chuỗi được sử dụng làm khóa để truy cập tài nguyên. Các khóa này có định dạng cụ thể, ví dụ:Kiểm tra định dạng chuỗi tại thời gian biên dịch trong C#
string key = "ABC123";
Hiện tại, tất cả các khóa này được lưu trữ dưới dạng chuỗi nhưng tôi muốn làm cho mọi thứ trở nên mạnh mẽ hơn và an toàn hơn. Lý tưởng nhất, tôi muốn kiểm tra các chuỗi có định dạng chính xác tại thời gian biên dịch.
Giai đoạn tiếp theo là tạo lớp ResourceKey được khởi tạo từ chuỗi. Sau đó, tôi có thể kiểm tra định dạng của chuỗi khi chạy, ví dụ:
ResourceKey key = "ABC123";
nơi resourcekey được định nghĩa là:
using System.Diagnostics;
using System.Text.RegularExpressions;
class ResourceKey
{
public string Key { get; set; }
public static implicit operator ResourceKey (string s)
{
Debug.Assert(Regex.IsMatch(s, @"^[A-Z]{3}[0-9]{3}$"));
return new ResourceKey() { Key = s };
}
}
Những gì tôi thực sự muốn làm là phải có một loại thời gian biên dịch khẳng định để chương trình thất bại trong việc xây dựng nếu có ai cố gắng sử dụng một khóa không hợp lệ. ví dụ.
ResourceKey k1 = "ABC123"; // compiles
ResourceKey k2 = "DEF456"; // compiles
ResourceKey k3 = "hello world"; // error at compile time
Có cách nào để đạt được điều này không?
Cảm ơn
Tôi đồng ý về vấn đề này, tôi cũng gợi ý kiểm tra http://www.postsharp.org/ để đảm bảo/sau khi lô-gic – kentaromiura
Ý tưởng hay - nhưng thật không may các phím này được truyền đi trong hàng chục nghìn dòng mã cũ - phần lớn không được kiểm tra bằng đơn vị. Chúng tôi sẽ đến đó! – roomaroo
Xin lỗi vì đã nghe về điều đó! –