字典的匿名集合初始值设定项
是否可以隐式声明下一个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问题 。