これをそこに投げ込むだけで、あなたが説明するような複雑な辞書を扱う場合、コードの読者にそれを整理させようとするよりも、実際の名前を使用する方がはるかに良いことがよくあります。
個人の好みに応じて、2 つの方法のいずれかを実行できます。using ステートメントを使用して、コンパイラのエイリアスを作成します。これはコンパイラのエイリアスであるため、完全修飾型名を使用する必要があることに注意してください。
using ComplexKey = System.Collections.Generic.Dictionary<String, String>;
using ComplexType = System.Collections.Generic.Dictionary<
System.Collections.Generic.Dictionary<String, String>,
String
>;
または、本格的な型の方法を使用して、Dictionary から継承するクラスを実際に作成することもできます。
class ComplexKey : Dictionary<String, String> { ... }
class ComplexType : Dictionary<ComplexKey, String> { ... }
これを行うと、あなたとコードの読者の両方が、何をしているのかを理解するのがはるかに簡単になります。私の一般的な経験則は、ジェネリックのジェネリックを作成している場合は、むしろ私のロジックを表すためにいくつかのファーストクラスの市民を構築することを検討する時です。