C# 对C字典中的每个值应用布尔测试

C# 对C字典中的每个值应用布尔测试,c#,dictionary,stack,boolean,conditional,C#,Dictionary,Stack,Boolean,Conditional,我有一个以字符作为键和堆栈值的字典。我想检查所有的堆栈是否都是空的 var groupStacks = new Dictionary<char, Stack<int>>(); groupStacks.Add( '(', new Stack<int>() );//parentheses stack groupStacks.Add( '{', new Stack<int>() );//braces stack groupStacks.Add( '\'

我有一个以字符作为键和堆栈值的字典。我想检查所有的堆栈是否都是空的

var groupStacks = new Dictionary<char, Stack<int>>();

groupStacks.Add( '(', new Stack<int>() );//parentheses stack
groupStacks.Add( '{', new Stack<int>() );//braces stack
groupStacks.Add( '\'', new Stack<int>() );//single quotes stack
groupStacks.Add( '"', new Stack<int>() );//double quotes stack
groupStacks.Add( '[', new Stack<int>() );//brackets stack

从逻辑上讲,我希望我需要遍历字典并检查每个堆栈,但我不希望为此编写for循环。

我发现字典实现了IEnumerable,因此可以使用Enumerable的扩展方法,如.Any和.All,因为这些方法接受IEnumerable作为参数

因此,我能够做到这一点:

if( groupStacks.All( s => !s.Value.Any() ) ) {
    //do something
}

或者如果groupStacks.Values.All v=>!v、 任何{}字典都不会实现扩展方法,它会实现IEnumerable,可枚举类中的所有扩展方法都将IEnumerable not IEnumerable作为第一个参数,这就是为什么可以调用字典上的所有LINQ扩展方法。好吧,我猜从技术上讲,实现这些方法的不是字典,这是一个很好的观点。我将进行编辑,看看是否能使那句话更加正确。