LINQ для IDictionary <TKey, TValue>? Есть ли AddIf, который я просто не могу найти? - PullRequest
2 голосов
/ 27 июля 2011

По сути, мне было интересно, существует ли уже способ сделать:

Прямо сейчас у меня есть:

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

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

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

Существует ли способ сделать:1007 *

Я добавил using System.Linq, но его там нет.

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Нет ничего встроенного - я не нахожу этот синтаксис интуитивно понятным, но вы могли бы написать свой собственный метод расширения, чтобы помочь вам:

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
0 голосов
/ 27 июля 2011

Я не вижу в этом ничего плохого:

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

AddIf излишне затруднит чтение кода - рассмотрим случаи, когда сам словарь имеет предикаты или функции в качестве ключей и значений.

И да, у LINQ нет такого расширения, как вы хотите.

...