2016-06-29 3 views
0

アイテムの属性を検証するコードに一時的な修正を加えます。これらは、「swatchImageUrl」と「swatchVariantAttribute」です。これらのいずれかが提供されている場合は、他の必見を提供すること。これを確認する場所は、値の辞書です。それでは、私が所定の位置に持っていることは以下の通りです:2つのキーのKeyValuePairのIListを検索

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などは使用できません)

私が行方不明になっているいくつかの素晴らしい方法がありますか?どんな洞察も大変ありがとうございます。

+2

'IF(transformedValues.Any(T => t.Key.Equals( "swatchImageUrl"))!= transformedValues.Any(T => t.Key.Equals( "swatchVariantAttribute"))){/ * ... * /} ' – ASh

+1

人々がブール式を必要以上に難しくする古典的な例です。あなたの声明は次のようになります:AとBが偽であるかAが偽であるかBが真である場合、実際にはAとBの両方が真でないか両方でないか、または単にA!= Bの場合 –

+0

あなたがた両方に感謝します!私はこれを考え過ぎていることを知っていた。 @HaraldDutch、うん必要以上に、それはより困難の古典的な例。時には戻ってくる前に一歩足を踏み入れて、単純なものが本当にどのようになっているかを理解する必要があります。 – Misemefein

答えて

0

は、念のために他の誰に似たbrainfreezeを持っています。これをより良い方法で行うための明白な方法は、AShが指摘したとおりです。

if(transformedValues.Any(t => t.Key.Equals("swatchImageUrl")) != transformedValues.Any(t => t.Key.Equals("swatchVariantAttribute"))) 
{ /*...*/ } 
関連する問題