どうやら、C#はC++と同じように'>>'レクサーのジレンマの影響を受けやすいようです。
このC#コードはかなり有効で、コンパイルして正常に実行されます。
var List = new Dummy("List");
var Nullable = new Dummy("Nullable");
var Guid = new Dummy("Guid");
var x = List<Nullable<Guid>> 10;
var y = List<Nullable<Guid>> .Equals(10,20);
上記のDummyクラスの'<'および'>>'演算子をオーバーロードする必要があります。
しかし、コンパイラーは、「x」の場合、その意味はList、Nullable、およびGuidローカル変数を使用することであると推測することができます。そして、「y」の場合、突然、それらをよく知られたタイプの名前として扱うことを決定します。
別の例を使用して、もう少し詳細な説明を示します。http: //mihailik.blogspot.co.uk/2012/05/nested-generics-c-can-be-stinky.html
問題は、C#コンパイラが「a <b <c>>」を算術式またはジェネリック型/メソッドにどのように解決するかということです。
確かに、それは成功するまでプログラムのテキストに複数の「行き」を持たせようとはしませんか、それともそうしますか?それには、無制限の先読みが必要であり、非常に複雑でもあります。