在KeyValuePairs的IList中搜索两个键

时间:2016-06-29 12:09:25

标签: linq list keyvaluepair

我正在对我们想要验证项目属性的代码进行临时修复。这些是" swatchImageUrl"和" swatchVariantAttribute"。如果提供了其中任何一个,则必须提供的其他。我将在哪里检查这是在值的字典。所以我所拥有的是以下内容:

if((transformedValues.Any(t => t.Key.Equals("swatchImageUrl")) &&
   !transformedValues.Any(t => t.Key.Equals("swatchVariantAttribute"))) ||
   (transformedValues.Any(t => t.Key.Equals("swatchVariantAttribute")) &&
   !transformedValues.Any(t => t.Key.Equals("swatchImageUrl"))))
   {
       // throw an error here
   }

这感觉很笨,可能效率低下(transformedValues可能是一个非常大的列表,我的理解是.Any()最终会枚举整个列表,如果没有)但我想不出更好的方法。 ' transformedItems'是一个字符串键值对的IList(所以我不能使用.ContainsKey等。)

是否有一些更好的整洁方式,我失踪了?非常感谢任何见解。

1 个答案:

答案 0 :(得分:0)

以防万一其他人有类似的脑风。 ASh指出,以更好的方式做到这一点的显而易见的方法是:

if(transformedValues.Any(t => t.Key.Equals("swatchImageUrl")) != transformedValues.Any(t => t.Key.Equals("swatchVariantAttribute"))) 
{ /*...*/ }