字典的匿名集合初始值设定项

是否可以隐式声明下一个Dictionary

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

所以我可以这样使用它:

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

怎么样:

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

但是,您可以在列表/数组上进行操作…

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

如果您需要通过(唯一)键进行O(1)查找,则只需要一个字典。

是的,但只有很好的解决方法,并且只在一个方法中。

这是你如何做到的:

  static Dictionary NewDictionary(TKey key, TValue value) { return new Dictionary(); } 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); } } 

有关详细信息,请参阅此SO问题 。