2012-03-17 39 views
5

Trong giải pháp của tôi, tôi phụ thuộc rất nhiều vào Từ điển với một enum như một chìa khóa. Tôi thấy nó rất dễ hiểu và để đọc công trình này.Thay thế từ điển bằng phím enum?

Một trở ngại đáng kể ở trên là không thể tuần tự hóa điều này. Xem Problems with Json Serialize Dictionary<Enum, Int32> để biết thêm thông tin về điều này.

Câu hỏi của tôi là:
Có mẫu có thể đọc và trực quan như nhau để thay thế Dictionary<enunm,object> có thể tuần tự hóa json bằng bộ nối tiếp json được tích hợp không?

Hôm nay tôi đã thay thế a.Instance.QueryableFields[Fields.Title] bằng a.Instance.QueryableFields[ Fields.Title.ToString()]. Không phải là rất thanh lịch, và nó được mở ra cho các lỗi.

+0

Thuộc tính enum có được lưu trữ làm giá trị của từ điển không? Tôi có thể đề nghị sử dụng giá trị enum như là một mã băm trong trường hợp đó. – Brannon

+0

Làm thế nào mà sẽ làm việc? Bạn có thể chỉ cho tôi một ví dụ? – Fontanka16

Trả lời

-1

Bạn có thể dễ dàng thay thế một cuốn từ điển với một mảng ở đây, như trong C# Enums được nội lưu lại dưới dạng số nguyên:

public enum MyEnum { Zero=0, One, Two }; 

object[] dictionary = new object[3]; 
dictionary[(int)MyEnum.Zero] = 4; 

EDIT: (xem ý kiến)

Bạn cũng có thể thay thế Dictionary<Enum, Object> với Dictionary<Int, Object>.

+5

Điều này chỉ có ý nghĩa nếu bạn chắc chắn rằng các giá trị chuyển từ '0' sang' mảng.Length-1' mà không bị ngắt. Nếu bạn có một enum như '{A = 0, B = 42, C = 31415}' bạn nên tạo một mảng các phần tử '31416' ... – digEmAll

1

Khi tuần tự hóa, chỉ cần chọn giá trị chuỗi. Nó không phải là rất gọn gàng, nhưng nó hoạt động.

a.Instance.QueryableFields.ToDictionary(x => x.Key.ToString(), x => x.Value) 
+0

Đó là một tùy chọn tôi đã cosidered. Nhưng sau đó tôi phải viết phương pháp serialize của riêng mình. Cảm ơn bạn đã gợi ý, nhưng tôi đang tìm kiếm một cách để thay thế toàn bộ điều. Hoặc là từ điển hoặc enum. – Fontanka16

Các vấn đề liên quan