是否可以在C#中使用别名指令声明递归?

时间:2012-05-05 22:26:16

标签: c# using-directives type-alias

此示例给出了“无法找到类型或命名空间名称'MyType'(您是否缺少using指令或程序集引用?)”

using MyType = System.Func<System.Int32, System.Tuple<System.Int32, MyType>>;

是否可以声明这样的递归类型?

2 个答案:

答案 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.
        }
    }
}

那就是说,我永远不会通过代码审查。谈论混乱。