OK, vì vậy tôi có trường cơ sở dữ liệu kiểu char (1) có một số lượng nhỏ mã trạng thái có thể (ví dụ: 'F' = Không, 'U' = Không xác định, v.v.). Tôi muốn có một lớp C# enum tương ứng với các trạng thái này. Tôi có thể làm:Làm thế nào để thực hiện C# enum cho liệt kê char (1) trường cơ sở dữ liệu?
public enum StatusCode : byte {
Unknown = (byte) 'U',
Failure = (byte) 'F',
// etc.
}
Cho đến nay rất tốt. Nhưng trong DataTable được trả về từ cơ sở dữ liệu, các giá trị cột là các phiên bản System.Data.SqlTypes.SqlString. Rõ ràng là một số vấn đề chuyển đổi từ một chuỗi C# (hoặc thậm chí là C# char) thành một byte C# (vì C# char thực sự là một điểm mã UTF-16). Nhưng trong trường hợp này tôi biết các giá trị bị ràng buộc với một tập hợp nhỏ và mã nên ném một ngoại lệ nếu một giá trị nằm ngoài tập hợp này đi qua.
Với ý nghĩ đó, cách tốt nhất để làm điều này là gì? Có an toàn để đúc từ một SqlString đến một byte? Convert.ToByte() có tốt hơn không? Nó sẽ được tốt hơn để chỉ đơn giản là sử dụng một chuyển đổi/trường hợp xây dựng để crosswalk các giá trị vào enum?
Tôi đang tìm cách "tốt nhất" để làm điều này, không chỉ về mặt nhận kết quả phù hợp mà còn cho sự rõ ràng của mã. Tôi cho rằng tôi cũng có thể chỉ sử dụng một số hằng số như
public const char UnknownStatus = 'U';
public const char FailureStatus = 'F';
Nhưng tôi muốn sử dụng enum nếu có thể. Có suy nghĩ gì không?
Chỉnh sửa: Để làm rõ những gì tôi muốn làm với điều này, tôi hy vọng sẽ sử dụng các giá trị này thường xuyên trong suốt mã của tôi. Ví dụ: tôi muốn có thể thực hiện những việc như:
public void DoSomething(StatusCode currentStatus) {
if(currentStatus == StatusCode.Failure) {
throw new SomeException();
}
switch(currentStatus) {
case StatusCode.Unknown:
// do something
break;
}
}
Và cứ tiếp tục như vậy. Tôi đặc biệt muốn tránh những thứ như:
public void DoSomething(char currentStatus) {
if(currentStatus == 'F') {
// do something
}
}
Vì trong trường hợp này tôi đang sử dụng số tiền cho "số ảo" khắp nơi. Đặc biệt, điều này sẽ làm cho việc di chuyển sang một số hệ thống gắn cờ nhà nước khác hầu như không thể. Điều đó có ý nghĩa?
Xem thêm http://stackoverflow.com/questions/1167927/syncing-referential-integrity-tables-and-enums và http://stackoverflow.com/questions/1015058/enum-storage-in- trường cơ sở dữ liệu và nói chung, http://stackoverflow.com/search?q=enum%20database&tab=newest –