2009-11-29 5 views
10

Est-il possible de déclarer implicitement suivant Dictionary<HyperLink, Anonymous>:collection Anonyme initialiseur pour un dictionnaire

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

pour que je puisse l'utiliser de cette façon:

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

?

+0

duplication possible de [Un dictionnaire où la valeur est un type anonyme en C#] (http://stackoverflow.com/questions/1619518/a-dictionary-where-value-is-an-anonymous-type-in-c -sharp) – nawfal

Répondre

16

Que diriez-vous:

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" }); 

Cependant, vous pouvez simplement foreach sur une liste/tableau ...

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); 
} 

Vous avez seulement besoin d'un dictionnaire si vous avez besoin O (1) recherche via (unique) clé.

1

Oui, mais seulement avec une bonne solution de contournement, et seulement dans une méthode.

Voici comment vous pouvez le faire:

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);  
     } 

    } 

Vous pouvez consulter cette SO question pour plus d'informations.

+0

ne répond pas à la question, les arguments inutilisés ... – Behrooz

Questions connexes