2009-06-04 16 views
10

Trong tập tin cài đặt của tôi, tôi muốn có một thiết lập đó là danh sách loại (của Myclass) .... Tôi không thể tìm thấy bất cứ điều gì trên mạng mà thực hiện điều này. Có thể không?Bạn có thể có một Danh sách chung (của T) trong tệp cài đặt của mình không?

+1

Ý của bạn là gì? "Trong tệp cài đặt của tôi" – Bob

+0

Bạn có định kế hoạch nhập có kiểu hỗn hợp được kế thừa từ T không? –

+1

Tệp cài đặt. Tệp được bao gồm trong dự án biểu mẫu cửa sổ trong studio trực quan. Cho phép bạn chỉ định cài đặt phạm vi người dùng và ứng dụng và tham chiếu chúng trong mã. – Codezy

Trả lời

8

tôi giả sử bạn đang nói về thiết lập người dùng ...

Tôi không biết nếu bạn có thể chỉ định một loại chung chung, mặc dù nếu bạn tạo kiểu phi-generic của riêng bạn mà kế thừa từ Danh sách (của MyClass), sau đó bạn có thể chỉ định loại này làm cài đặt người dùng của mình mà không gặp bất kỳ sự cố nào.

Cái gì như:

Public Class MyClassList 
    Inherits List(Of MyClass) 

End Class 

Sau đó, bạn sẽ có thể duyệt MyClassList.

+1

Đây là điều mà đồng nghiệp của tôi đã làm, tks. – Codezy

-1

Có thể, chỉ cần nhập Danh sách <SomeType> vào trường loại theo cách thủ công, nó sẽ hoạt động.

+0

Bạn nhập địa chỉ này ở đâu? Trong thuộc tính của dự án trong tab Cài đặt, bạn không thể thêm loại trường theo cách thủ công. Bạn phải thêm một trong các loại được xác định trước hoặc duyệt tìm một loại. (đối với dự án VB) –

+0

Đúng vậy, bạn phải duyệt tìm một loại. – Codezy

+0

Mh, tôi không nhớ chính xác mình đã làm thế nào, nhưng bằng cách nào đó tôi có thể nhập một kiểu chung. Nếu nó không hoạt động, tôi sẽ làm cho một wrapper serializable mà kế thừa từ danh sách chung chung. Ít nhất thì điều này cũng có tác dụng. – Enyra

0

Bạn có thể tuần tự hóa List<T> thành một chuỗi và đặt nó vào tệp cài đặt của mình.

Điều đó có hiệu quả không?

12

Tôi đồng ý rằng giải pháp kế thừa của Meta-Knight là tốt nhất, tuy nhiên có thể thực hiện việc này bằng cách chỉnh sửa thủ công tệp XML cài đặt. Trong Solution Explorer, hãy vào: Giải pháp> Project> Properties> Settings.settings. Nhấp chuột phải vào Settings.settings và chọn "Open With". Chọn "Trình soạn thảo XML (Văn bản)". Sau đó, chèn nội dung sau vào bên trong <Settings>:

<Setting Name="TestGenericList" Type="System.Collections.Generic.List&lt;int&gt;" Scope="User"> 
    <Value Profile="(Default)" /> 
</Setting> 

lưu và hoạt động.

Rất tiếc, dường như không hoạt động với các loại chung yêu cầu hai hoặc nhiều loại, vì dấu phẩy không được phép trong thuộc tính đó. Ngay cả thực thể mã hóa nó (&#x002C;) đã không giúp đỡ.

Sau đây gây ra một lỗi "nhân vật bất hợp pháp trên đường đi" khi bạn đi đến chỉnh sửa cài đặt tập tin trong thiết kế thiết lập:

<Setting Name="TestGenericDictionary" Type="System.Collections.Generic.Dictionary&lt;string&#x002C;string&gt;" Scope="User"> 
    <Value Profile="(Default)" /> 
</Setting> 
+0

Mặc dù giao diện người dùng cho các cài đặt thực tế sẽ ném ngoại lệ khi sử dụng & # x002C; , lớp học vẫn được xây dựng. Nó chỉ có nghĩa là vài mục cuối cùng mà bạn đưa vào sẽ phải là những thứ sử dụng nó. – Will

+0

Thật không may, cách tiếp cận thủ công không hoạt động trong VB.NET –

+0

Có thể tránh thông báo lỗi "ký tự không hợp lệ" bằng cách sử dụng '' 'System.Collections.Generic.Dictionary'2 [System.String, System.String]' '' thay thế. Thật không may, đây không phải là giải pháp vì những thay đổi không được duy trì (Từ điển không thể tuần tự hóa được). Chuyển sang '' 'System.Collections.Generic.List'1 [System.Collections.Generic.KeyValuePair'2 [System.String, System.String]]' '' không giúp được, bởi vì 'KeyValuePair' [không thể tuần tự hóa được ] (https://blogs.msdn.microsoft.com/seshadripv/2005/11/02/serializing-an-object-of-the-keyvaluepair-generic-class/)! – Vlad

3

Tôi có thể là một chút muộn để các trò chơi trong việc cung cấp một giải pháp này câu trả lời, nhưng bạn có thể bao gồm thuộc tính cài đặt chung trong một lớp từng phần trong một tệp khác trong dự án, do đó, Trình thiết kế cài đặt sẽ không ghi đè bất kỳ mã tùy chỉnh nào bạn thêm vào.

Trong trường hợp của tôi (sử dụng VB.NET), tôi muốn lưu trữ Dictionary(Of String, String) trong My.Settings, ngoại trừ từ điển phải được đăng ký dưới dạng nhị phân vì nó không dễ dàng tuần tự hóa thành XML. Tôi đã gỡ bỏ thuộc tính cài đặt từ nhà thiết kế, và sau đó thêm vào các tập tin Settings.Extended.vb để dự án của tôi với đoạn mã sau bên trong:

'** Keeping My.Settings.FormLayouts out of Settings.Designer.vb so that this custom code is not overwritten by Visual Studio.' 

Namespace My 
    Partial Friend NotInheritable Class MySettings 
     <Configuration.UserScopedSettingAttribute(), _ 
     DebuggerNonUserCodeAttribute(), _ 
     Configuration.SettingsSerializeAs(Configuration.SettingsSerializeAs.Binary)> _ 
     Public Property FormLayouts() As Dictionary(Of String, String) 
     Get 
      Return CType(Me("FormLayouts"), Dictionary(Of String, String)) 
     End Get 
     Set(ByVal value As Dictionary(Of String, String)) 
      Me("FormLayouts") = value 
     End Set 
     End Property 
    End Class 
End Namespace 

Thuộc tính FormLayouts vẫn là một phần của My.Settings, và sẽ được nạp và được lưu như thường lệ, nhưng việc thêm các cài đặt khác trong Trình thiết kế cài đặt của ứng dụng sẽ không ghi đè mã ở trên.

+1

Haha trễ một chút (3 năm). Không còn trong .Net đất. Tuy nhiên, tôi chắc chắn điều này sẽ giúp một người nào đó! – Codezy

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