此示例给出了“无法找到类型或命名空间名称'MyType'(您是否缺少using指令或程序集引用?)”
using MyType = System.Func<System.Int32, System.Tuple<System.Int32, MyType>>;
是否可以声明这样的递归类型?
答案 0 :(得分:1)
不,我认为不可能。在为using
语句分配别名之前,MyType mytype = x => Tuple<int, MyType>.Create(x, ???);
语句的右侧需要解析为实际类型。在您的情况下,为了解决右侧的问题,编译器必须完全定义allias ...这需要它来解析右侧。这个递归问题没有结束,所以编译器显然不会打扰。
为了使这里的问题更清楚:让我们假设编译器设法编译你的别名,我这样做了:
{{1}}
我可以在函数体中放置什么来定义返回值?最终我需要一个可构造的类型返回。
答案 1 :(得分:0)
假设您正在讨论using指令(位于文件顶部)并且MyType存在,是的,这是可能的。例如,这是完全合法的:
using System;
using String = System.Func<System.String>;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String myString = () => "Foo";
// myString is now a function returning the string "Foo". Yikes.
}
}
}
那就是说,我永远不会通过代码审查。谈论混乱。