10

next を暗黙的に宣言することは可能ですか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;
}

?

4

2 に答える 2

16

どうですか:

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) ルックアップが必要な場合にのみ、辞書が必要です。

于 2009-11-29T11:22:34.880 に答える
1

はい、ただし、優れた回避策があり、メソッド内でのみです。

これはあなたがそれを行う方法です:

    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 の質問を参照してください。

于 2009-11-29T11:11:07.663 に答える