2011-08-25 24 views
8

Giá trị enum có thể được lưu dưới dạng cài đặt không, sử dụng cú pháp Properties.Settings.Default["MySetting"] của C#? Tôi đã cố gắng tạo một thiết lập trong các trang thuộc tính của dự án của tôi, nhưng chỉ có các lớp hệ thống xuất hiện trong danh sách các kiểu có sẵn.C#: Giá trị Enum có thể được lưu dưới dạng Cài đặt không?

Nếu có thể thực hiện được, làm cách nào để thực hiện? Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

13

chỉ lưu trữ dưới dạng int và chuyển đổi khi cần.

Properties.Settings.Default["MySetting"] = myEnumValue; 

// and later 
var settingValue = Properties.Settings.Default["MySetting"]; 
MyEnum value = (MyEnum)settingValue; 

Nếu bạn thấy cần thiết, bạn có thể sử dụng Enum.IsDefined(typeof(MyEnum), value) để đảm bảo nó hợp lệ. Bạn cũng có thể lưu trữ một giá trị chuỗi để nó trong một định dạng con người có thể đọc được trong tập tin cấu hình của bạn:

Properties.Settings.Default["MySetting"] = myEnumValue.ToString(); 

// and later 
var settingValue = Properties.Settings.Default["MySetting"]; 
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum), settingValue); 
+5

Hoặc lưu trữ một chuỗi ', sau đó sử dụng' Enum.TryParse'. Con người dễ đọc hơn theo cách đó. –

+0

Có một câu trả lời hay hơn [ở đây] (http://stackoverflow.com/questions/2184209). Tóm lại, trong cột Type, chọn "Browse ...", sau đó nhập tên đầy đủ của enum trong hộp văn bản "Selected type" ở dưới cùng. –

0

Dưới đây là cách tôi đặt kiểu Setting để loại MyEnum enum:

  1. Tạo thiết lập sở hữu mới của bạn thuộc loại string (loại string sẽ được thay đổi để MyEnum gõ vào các bước tiếp theo)

  2. mở Settings.Designer.cs

: enter image description here

  1. Sửa đổi các kiểu trả về Sở hữu mới của bạn từ string để loại bạn enum MyEnum:

    Với Thiết Loại Enum được đặt tên MyEnum (trong Company.Enums không gian tên), chỉnh sửa loại trả về là loại global::Company.Enums.MyEnum:

    [global::System.Configuration.ApplicationScopedSettingAttribute()] 
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
        [global::System.Configuration.DefaultSettingValueAttribute("MySetting")] 
        public global::Company.Enums.MyEnum MyEnum{ 
         get { 
          return ((global::Company.Enums.MyEnum)(this["MyEnum"])); 
         } 
        } 
    

Cách này có vẻ sạch hơn, chỉ với một tuyên bố; loại an toàn được đảm bảo ở phía máy khách, mà không cần phải thực hiện chuỗi không cần thiết để phân tích cú pháp enum.

MyEnum value = Properties.Settings.Default["MySetting"]; 
+3

Vấn đề với cách tiếp cận này là VS sẽ thay đổi các thay đổi của bạn nếu bạn thực hiện bất kỳ thay đổi nào đối với .settings. Bạn không bao giờ nên thay đổi các tệp * .Designer.cs. – Timbo

+3

Việc bạn có thể làm là tạo một tệp khác mở rộng một phần được xác định trong trình thiết kế, chứa thuộc tính chuyển đổi. – Timbo

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