Неоднозначность вложенного универсального синтаксиса >>

Судя по всему, C# так же восприимчив к дилемме лексера '>>' , как и C++.

Этот код C# довольно корректен, он компилируется и работает просто отлично:

var List = new Dummy("List");
var Nullable = new Dummy("Nullable");
var Guid = new Dummy("Guid");

var x = List> 10;
var y =  List> .Equals(10,20);

Вам придется перегрузить операторы '>' для класса-пустышки выше.

Но компилятор умудряется догадаться, что в случае 'x' смысл в том, чтобы использовать локальные переменные List, Nullable и Guid. А в случае 'y' он вдруг решает рассматривать их как имена общеизвестных типов.

Вот более подробное описание с другим примером: http://mihailik.blogspot.co.uk/2012/05/nested-generics-c-can-be-stinky.html

Вопрос в том, как компилятор C# разрешает 'a>' в арифметическое выражение или универсальный тип/метод?

Конечно, он не пытается несколько раз «пройтись» по тексту программы, пока не добьется успеха, или делает это? Это потребовало бы неограниченного просмотра вперед, и к тому же очень сложного.

10
задан Community 23 May 2017 в 10:34
поделиться