Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IDictionary的LINQ<;TKey,TValue>;?是否有一个我可以';我好像找不到?_C#_Linq_Dictionary_Predicate - Fatal编程技术网

C# IDictionary的LINQ<;TKey,TValue>;?是否有一个我可以';我好像找不到?

C# IDictionary的LINQ<;TKey,TValue>;?是否有一个我可以';我好像找不到?,c#,linq,dictionary,predicate,C#,Linq,Dictionary,Predicate,基本上,我想知道是否已经有一种方法可以做到: dictionary.AddIf(KeyA, ValueA, ...) //etc? 现在我有: 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?
现在我有:

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?

我使用System.Linq添加了
,但它不在其中。

没有内置任何东西-我觉得这种语法不直观,但您可以编写自己的扩展方法来帮助您:

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);
    }
}
公共静态类字典帮助器
{
公共静态无效AddIf(本词典的规定,
T键,
U值,
谓词pred)
{
if(pred(键))
dict.Add(键、值);
}
}
示例用法:

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
Dictionary dict=new Dictionary();
谓词=键=>{return key.Length==3;};
dict.AddIf(“foo”,“bar”,谓语)//傅补充道
dict.AddIf(“tooLong”,“baz”,谓语)//图龙未添加

我认为这样做没有什么错:

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

A<代码> AddIf < /代码>将不必要地使代码更难阅读——考虑字典本身具有谓词或函数作为键和值的情况。


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

LINQ在哲学上反对这种方法。LINQ是功能性的-这意味着没有副作用。这种方法只对其副作用有用。