Dictionary<TKey, TValue>.ForEach方法

4

我想声明一个类似于List.ForEach 方法的新扩展方法。

我的目标是:

var dict = new Dictionary<string, string>()
{
   { "K1", "V1" },
   { "K2", "V2" },
   { "K3", "V3" },
};


dict.ForEach((x, y) => 
{
   Console.WriteLine($"(Key: {x}, value: {y})");
});

我该怎么做呢?

4个回答

3

请尝试以下方法:

var dict = new Dictionary<string, string>()
{
   { "K1", "V1" },
   { "K2", "V2" },
   { "K3", "V3" },
};

foreach(KeyValuePair<string, string> myData in dict )
{
    // Do something with myData.Value or myData.Key
}

这是扩展方法:

public static void ForEach<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, Action<TKey, TValue> invokeMe)
{
    foreach(var keyValue in dictionary)
    {
        invokeMe(keyValue.Key, keyValue.Value);
    }
}

循环内部不需要使用lambda表达式吗? - Tân
你在这里到底想要实现什么?我的意思是,@HappyCoding 是否有任何添加/删除的东西? - Neel
你的答案不匹配。我已经展示了伪代码。 - Tân
抱歉我错过了扩展方法部分。现在已更新 @HappyCoding - Neel

3

您可以轻松编写扩展方法:

public static class LinqExtensions
{
    public static void ForEach<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, Action<TKey, TValue> invoke)
    {
        foreach(var kvp in dictionary)
            invoke(kvp.Key, kvp.Value);
    }
}

使用方式如下:

dict.ForEach((x, y) => 
{
   Console.WriteLine($"(Key: {x}, value: {y})");
});

生成

Key: K1, value: V1
Key: K2, value: V2
Key: K3, value: V3

1
var dic = new Dictionary<string, string>();
dic.Add("hello", "bob");
dic.Foreach(x =>
{
   Console.WriteLine(x.Key + x.Value);
});


public static void Foreach<T, TY>(this Dictionary<T, TY> collection,   Action<T, TY> action)
{
    foreach (var kvp in collection)
    {
        action.Invoke(kvp.Key, kvp.Value);
    }
}

1
action.Invoke(kvp.Key, kvp.Value); 可以缩写为 action(kvp.Key, kvp.Value); - Zdeslav Vojkovic

1

1:扩展方法必须在非嵌套、非泛型、静态类中声明。
2:第一个参数必须使用this关键字进行注释。

public static class DictionaryExtensions
{
    public static void ForEach<TKey, TValue>(
        this Dictionary<TKey, TValue> dictionary,
        Action<TKey, TValue> action) {

        foreach (KeyValuePair<TKey, TValue> pair in dictionary) {
            action(pair.Key, pair.Value);
        }
    }
}

然后可以像调用常规实例方法一样调用此方法:
dict.ForEach((key, value) =>
    Console.WriteLine($"(Key: {key}, Value: {value})"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接