【问题标题】:Anonymous collection initializer for a dictionary字典的匿名集合初始化器
【发布时间】:2009-11-29 11:08:59
【问题描述】:

是否可以隐式声明下一个Dictionary<HyperLink, Anonymous>

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

?

【问题讨论】:

标签: c# .net dictionary anonymous-types collection-initializer


【解决方案1】:

怎么样:

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

但是,您可以只在列表/数组上使用foreach...

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) 查找,则只需要字典。

【讨论】:

    【解决方案2】:

    是的,但只有很好的解决方法,并且只能在方法内。

    你可以这样做:

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

    您可以参考此SO question 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多