显然,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>>'解析为算术表达式或泛型类型/方法?
它肯定不会尝试多次遍历程序文本直到成功,难道会吗?这将需要无限的前瞻,并且是一个非常复杂的工具。
-->
和<--
运算符 ;) - Thomas Levesque