2009-11-29 17 views
10

Có thể ngầm tuyên bố tiếp theo Dictionary<HyperLink, Anonymous>:Anonymous initializer bộ sưu tập cho một cuốn từ điển

{ urlA, new { Text = "TextA", Url = "UrlA" } }, 
{ urlB, new { Text = "TextB", Url = "UrlB" } } 

vì vậy tôi có thể sử dụng nó theo cách này:

foreach (var k in dic) 
{ 
    k.Key.Text = k.Value.Text; 
    k.Key.NavigateUrl = k.Value.Url; 
} 

?

+0

bản sao có thể có của [Từ điển có giá trị là một loại ẩn danh trong C#] (http://stackoverflow.com/questions/1619518/a-dictionary-where-value-is-an-anonymous-type-in-c -sharp) – nawfal

Trả lời

16

Làm thế nào về:

var dict = new[] { 
      new { Text = "TextA", Url = "UrlA" }, 
      new { Text = "TextB", Url = "UrlB" } 
     }.ToDictionary(x => x.Url); 
// or to add separately: 
dict.Add("UrlC", new { Text = "TextC", Url = "UrlC" }); 

Tuy nhiên, bạn có thể chỉ foreach trên một danh sách/mảng ...

var arr = new[] { 
    new { Text = "TextA", Url = "UrlA" }, 
    new { Text = "TextB", Url = "UrlB" } 
}; 
foreach (var item in arr) { 
    Console.WriteLine("{0}: {1}", item.Text, item.Url); 
} 

Bạn chỉ cần một cuốn từ điển nếu bạn cần O (1) tra cứu thông qua (duy nhất) chính.

1

Có, nhưng chỉ với cách giải quyết tuyệt vời và chỉ trong một phương thức.

Đây là cách bạn có thể làm điều đó:

static Dictionary<TKey, TValue> NewDictionary<TKey, TValue>(TKey key, TValue value) 
    { 
     return new Dictionary<TKey, TValue>(); 
    } 
    public void DictRun() 
    { 

     var myDict = NewDictionary(new { url="a"}, 
      new { Text = "dollar", Url ="urlA"}); 
     myDict.Add(new { url = "b" }, new { Text = "pound", Url = "urlB" }); 
     myDict.Add(new { url = "c" }, new { Text = "rm", Url = "urlc" }); 
     foreach (var k in myDict) 
     { 
      var url= k.Key.url; 
      var txt= k.Value.Text; 

      Console.WriteLine(url); 
      Console.WriteLine(txt);  
     } 

    } 

Bạn có thể tham khảo SO question này cho biết thêm.

+0

không trả lời câu hỏi, đối số không được sử dụng ... – Behrooz