2009-07-30 38 views
5

Trong TagBuilder và các lớp khác tôi có thể viết một cái gì đó như:Cách khởi tạo IDictionary trong hàm tạo?

var tr = new TagBuilder("HeaderStyle"){InnerHtml = html, [IDictionary Attributes]} 

nhưng tôi không biết làm thế nào để vượt qua các tham số IDictionary.

Tôi làm cách nào để thực hiện điều đó khi đang bay? Không tạo biến từ điển.

TagBuilder là một ví dụ, có các lớp khác chấp nhận tham số IDictionary. Câu hỏi đặt ra là về trường hợp chung.

Trả lời

5

Bài đăng trên blog sau có phương thức trợ giúp có thể tạo đối tượng Từ điển từ các loại ẩn danh.

http://weblogs.asp.net/rosherove/archive/2008/03/11/turn-anonymous-types-into-idictionary-of-values.aspx

void CreateADictionaryFromAnonymousType() 
    { 
     var dictionary = MakeDictionary(new {Name="Roy",Country="Israel"}); 
     Console.WriteLine(dictionary["Name"]); 
    } 

private IDictionary MakeDictionary(object withProperties) 
    { 
     IDictionary dic = new Dictionary<string, object>(); 
     var properties = 
      System.ComponentModel.TypeDescriptor.GetProperties(withProperties); 
     foreach (PropertyDescriptor property in properties) 
     { 
      dic.Add(property.Name,property.GetValue(withProperties)); 
     } 
     return dic; 
    } 
+0

Robert, tôi không thấy như thế nào mà làm việc trong một initializer đối tượng. –

+0

Nó không hoạt động cho TagBuilder bởi vì, như bạn đã chỉ ra chính xác, setter là riêng tư. –

0

Nếu bạn đang tham chiếu đến thuộc tính Thuộc tính, trình thiết lập là riêng tư, do đó bạn không thể đặt nó trong trình khởi tạo đối tượng.

Sau khi bạn đã khởi tạo Trình tạo thẻ, bạn sẽ có thể thêm các thuộc tính riêng lẻ với tr.Attributes.Add(key,value).

37

Một cách khác để tạo từ điển từ các loại Anonymous:

new Dictionary<int, StudentName>() 
{ 
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, 
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317}}, 
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198}} 
}; 

http://msdn.microsoft.com/en-us/library/bb531208.aspx

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