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是功能性的-这意味着没有副作用。这种方法只对其副作用有用。