は、MSDNのOperator precedence and associativity
(Dictionary<String, String>)((Object[])e.Result)[1];
に依存します[]「一次式」CAにある -
は
Object[] cast1 = (Object[]) e.Result;
キャスト動作がインデクサよりも低い優先度である「単項演算子」カテゴリーに分類されるになりテゴリー。
元の行 - indexer - []が最初の優先度として左のオブジェクトに直ちに適用されるため、キャスト:((Object [])e.Result)の周りに()が必要です。 around()がなければ、キャストはインデクサーの後に適用され、e.Resultは型オブジェクトの(おそらく?)なので、コンパイル時に失敗します。 ()の行がないと、次のようになります。
(Object[])e.Result[1]
これは無効です。
((Object[])e.Result)[1]
はe.Resultが最初のオブジェクト[]を入力するために鋳造され、その後、インデクサは、最初の要素にアクセスするために使用されることを保証します。
第二キャスト
Dictionary<String, String> cast2 = (Dictionary<String, String>) cast1[1];