LINQ for IDictionary <tkey,tvalue =“”>?是否有一个我似乎无法找到的AddIf?</tkey,>

时间:2011-07-26 21:08:34

标签: c# linq dictionary predicate

基本上,我想知道是否已经有办法:

现在我有:

if (func())
{
    dictionary.add(KeyA, ValueA);
}

if (func2(myString))
{
    dictionary.add(KeyB, ValueB);
}

if (anonymous predicate)
{
    dictionary.Add(KeyC, ValueC);
}

是否已有办法:

dictionary.AddIf(KeyA, ValueA, ...)
//etc?

我添加了using System.Linq,但它不在那里。

2 个答案:

答案 0 :(得分:4)

内置任何内容 - 我发现这种语法不直观,但您可以编写自己的扩展方法来帮助您:

public static class DictionaryHelper
{
    public static void AddIf<T, U>(this Dictionary<T, U> dict,
                                   T key, 
                                   U value, 
                                   Predicate<T> pred)
    {
        if (pred(key))
            dict.Add(key, value);
    }
}

样本使用:

Dictionary<string, string> dict = new Dictionary<string, string>();
Predicate<string> predicate =  key => { return key.Length == 3; };

dict.AddIf("foo", "bar", predicate); //foo added
dict.AddIf("tooLong", "baz", predicate); //toolong not added

答案 1 :(得分:0)

我认为这样做并没有错:

if (func())
{
    dictionary.add(KeyA, ValueA);
}

AddIf将不必要地使代码更难以阅读 - 考虑字典本身具有谓词或作为键和值的情况。

是的,LINQ没有你想要的扩展名。